IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

à quoi servent "extern" et "__cplusplus"


Sujet :

C++

  1. #1
    Membre confirmé Avatar de yashiro
    Inscrit en
    Mars 2004
    Messages
    214
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 214
    Par défaut à quoi servent "extern" et "__cplusplus"
    A quoi sert la constante __cplusplus
    et la directive extern "C"

    je vois ça dans le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    #ifndef MYLIBTEST_H
     
    #define MYLIBTEST_H
     
     
     
    #ifdef __cplusplus
     
    extern "C"
     
    {
     
    #endif
     
     
     
    void helloWorld();
     
     
     
    #ifdef __cplusplus
     
    }
     
    #endif

  2. #2
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    C'est quoi comme librairie?
    Une dll?

  3. #3
    Membre Expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Par défaut
    #ifdef __cplusplus

    permetde compiler ce programme en mode c++ et adapte donc le source dans ce but

    extern "C"

    signifie que le programme c++ exporte des fonctions de c

    il s'agit donc d'obtenir une librairie utilisable en c et en c++

  4. #4
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    extern "C" permet d'indiquer que les fonctions déclarées à l'intérieur utiliseront une convention d'appel C (pas de déclaration de noms, pas de surcharge possible...) au lieu de la convention C++ standard. En gros, c'est comme si on mettait un petit bout de C dans du code C++, appelable depuis le C++.

    Souvent, le but est de pouvoir appeller une biblithèque C depuis du C++ ou l'inverse. Donc ce fichier d'en-tête sera généralement compilé dans les deux langages. Comme le C ne comprends pas la syntaxe 'extern "C"', on utilise la compilation conditionelle pour que ces mots n'apparaissent pas quand c'est le compilateur C qui tourne.

    __cplusplus est un #define automatiquement défini par le compilateur quand il compile en mode C++ (c'est standard).
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo