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 :

Utiliser du C dans du C++


Sujet :

C++

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2004
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 37
    Points : 15
    Points
    15
    Par défaut Utiliser du C dans du C++
    Bonjours a tous,

    je souhaiterai interger du code C dans une application C++ et je ne sais pas du tout comment faire alors je vous demande conseil merci a tous :-)

    ps: J'utilise le C++ pour crée une interface visuel puis j'ai un programme fais en C qui lui install des imprimantes. Je doit utilisé mon interface pour que les users donne les donées de l'imprimante puis après c'est le petit soft en C qui fais le reste.

    je sais pas si vous avez besoin de plus d'info pour me conseiller ou pour m'aider alors si jamais dite le moi.

    Merci

    a si jamais je suis encore noob en C++....

  2. #2
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    extern "C" 
    {
    // code C
    }
    ?

    Même en principe ton code C est compatible C++. Le C constitue un sous-ensemble du C++, en gros. Donc en principe ton code devrait marcher, pour peu que les bonnes librairies soient installées.

  3. #3
    Membre à l'essai
    Inscrit en
    Octobre 2004
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 37
    Points : 15
    Points
    15
    Par défaut
    Merci de pour ton aide :-)

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Citation Envoyé par Alp
    Même en principe ton code C est compatible C++. Le C constitue un sous-ensemble du C++, en gros. Donc en principe ton code devrait marcher, pour peu que les bonnes librairies soient installées.
    Pas exactement.

    • Le code C et le code C++ doivent être dans deux fichier source séparés.
    • Les définitions des fonctions C n'ont pas à être modifiées.
    • Les déclarations des fonctions C (dans un header, donc) que l'on veut rendre accessibles depuis le C++ doivent être précédées de extern "C" (ou entourées de extern "C" {}) uniquement quand on compile en C++, pour indiquer au compilateur C++ que ce sont des fonctions C (sinon, le linker ne les trouvera pas).
    • Les définitions des fonctions C++ que l'on veut rendre accessibles depuis le C doivent être précédées de extern "C" ou entourées de extern "C" {}.
    • Les déclarations des fonctions C++ (dans un header, donc) que l'on veut rendre accessibles depuis le C doivent être précédées de extern "C" (ou entourées de extern "C" {}) uniquement quand on compile en C++, pour indiquer au compilateur C++ que les fonctions sont en extern "C" (sinon, le linker ne les trouvera pas non plus).


    Exemple :
    Les fonctions C :
    Code C : 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
    /*
    FonctionsC.h
    */
     
    /* Définition de la macro EXTERN_C pour C ou C++ */
    #ifndef EXTERN_C
    #ifdef __cplusplus
    #define EXTERN_C extern "C"
    #else
    #define EXTERN_C
    #endif
    #endif
     
    /* Ces fonctions sont accessibles en C++, 
       car le linker saura que ce sont des fonctions C. */
    EXTERN_C int fonction1(int);
    EXTERN_C int fonction2(char const *);
    EXTERN_C void * fonction3(void);
     
    /* Ces fonctions ne seront pas accessibles en C++, 
       car le linker croira que se sont des fonctions C++. */
    int fonction4(int, int);
    int fonction5(void);
    Code C : 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
    26
    27
    28
    /*
    FonctionsC.c
    */
    #include <stdlib.h>
    #include <stdio.h>
    #include "FonctionsC.h"
     
    int fonction1(int a)
    {
    return 2*a;
    }
    int fonction2(char const *s)
    {
    return puts(s);
    }
    void * fonction3(void)
    {
    return NULL;
    }
     
    int fonction4(int a, int b)
    {
    return a*b;
    }
    int fonction5(void)
    {
    return 42;
    }
    Les fonctions C++ :
    Code C++ : 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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    /*
    FonctionsCpp.h
    */
     
    /* Définition de la macro EXTERN_C pour C ou C++ */
    #ifndef EXTERN_C
    #ifdef __cplusplus
    #define EXTERN_C extern "C"
    #else
    #define EXTERN_C
    #endif
    #endif
     
    /* Ces fonctions sont accessibles en C et en C++, car:
     Le linker C croira que ce sont des fonctions C et il aura presque raison,
     Le linker C++ saura que leurs définitions sont en extern "C" */
    EXTERN_C int fonction6(int);
    EXTERN_C int fonction7(char const *);
    EXTERN_C void * fonction8a(void);
    EXTERN_C void fonction8b(void *);
     
    /* Ces fonctions ne seront pas accessibles en C, 
       car le linker croira, à tort, que ce sont des fonctions C. */
    int fonction9(int, int);
    int fonction10(void);
     
    /* Ces fonctions ne doivent être accessibles qu'en C++,
       car elles seraient inutilisables en C et leur déclaration seule 
       causerait une erreur de compilation */
    #ifdef __cplusplus
    #include <string>
     
    std::string::size_type fonction11(std::string const &);
    #endif
    Code C++ : 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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    #include "FonctionsCpp.h"
    #include <iostream>
    using namespace std;
     
    /* Ces fonctions sont accessibles en C et en C++, car:
     Le linker C croira que ce sont des fonctions C et il aura presque raison,
     Le linker C++ saura que leurs définitions sont en extern "C" */
    extern "C" int fonction6(int a)
    {
    return 3*a;
    }
     
    extern "C" int fonction7(char const *sz)
    {
    cout << sz << endl;
    return 33;
    }
     
    extern "C" void * fonction8a(void)
    {
    return new string("Les fonctions C ne peuvent rien faire de cet objet, mais peuvent avoir son adresse");
    }
     
    extern "C" void fonction8b(void *pv)
    {
    string *ps = static_cast< string * >(pv);
    delete ps;
    }
     
    /* Ces fonctions ne seront pas accessibles en C, 
       car le linker croira, à tort, que ce sont des fonctions C. */
    int fonction9(int a, int b)
    {
    	return (b==0 ? -1 : a/b);
    }
     
    int fonction10(void)
    {
    	return 0x12345678;
    }
     
    /* Ces fonctions ne doivent être accessibles qu'en C++,
       car elles seraient inutilisables en C et leur déclaration seule 
       causerait une erreur de compilation */
    std::string::size_type fonction11(std::string const &s)
    {
    	return s.length();
    }
    Le programme de test en C :
    Code C : 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
    #include "FonctionsC.h"
    #include "FonctionsCpp.h"
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(void)
    {
    	printf("1: %d\n", fonction1(2));
    	printf("2: %d\n", fonction2("coucou"));
    	printf("3: %p\n", fonction3());
    	printf("4: %d\n", fonction4(3, 4));
    	printf("5: %d\n", fonction5());
     
    	printf("6: %d\n", fonction6(2));
    	printf("7: %d\n", fonction7("bonjour"));
    	{
    		void *p = fonction8a();
    		printf("8: %p\n", p);
    		fonction8b(p);
    	}
    	return EXIT_SUCCESS;
    }
    Sa sortie (chez moi, VS2005, Windows XP) :
    Code X : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    1: 4
    coucou
    2: 0
    3: 00000000
    4: 12
    5: 42
    6: 6
    bonjour
    7: 33
    8: 00356A68
    Le programme de test en C++ :
    Code C++ : 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
    26
    #include "FonctionsC.h"
    #include "FonctionsCpp.h"
    #include <iostream>
    #include <string>
    using namespace std;
     
    int main(void)
    {
    	cout << "1: " << fonction1(2) << endl;
    	cout << "2: " << fonction2("coucou") << endl;
    	cout << "3: " << fonction3() << endl;
     
    	cout << "6: " << fonction6(2) << endl;
    	cout << "7: " << fonction7("bonjour") << endl;
    	{
    		void *p = fonction8a();
    		cout <<"8: " << p << endl;
    		string const *pcs = static_cast< string const * >(p);
    		cout << "11: " << fonction11(*pcs) << endl;
    		fonction8b(p);
    	}
    	cout << "9: " << fonction9(15, 3) << endl;
    	cout << "10: " << fonction10() << endl;
     
    	return EXIT_SUCCESS;
    }
    Et sa sortie chez moi :
    Code X : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    1: 4
    coucou
    2: 0
    3: 00000000
    6: 6
    bonjour
    7: 33
    8: 00355AB0
    11: 82
    9: 5
    10: 305419896
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    (Faut croire que j'ai du temps à perdre, ce matin)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Ouaip en effet.
    C'était pas dans la FAQ tout ça ?
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Si tu parles de cette entrée, elle ne brille pas par sa précision et ne mentionne qu'un seul sens...
    Quant à celle-ci, elle ne dit pas beaucoup non plus...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 241
    Points : 83
    Points
    83
    Par défaut
    Est on obligé de déffinir les fonctions C++ à l'aide d'un extern "C" ?
    Ne suffit il pas de les deffinir normalement?

  9. #9
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Non.
    Les fonctions C++ qui ne sont pas définies en extern "C" auront un nom manglé à la C++ et ne seront pas visibles depuis le C.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  10. #10
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    630
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 630
    Points : 234
    Points
    234
    Par défaut
    Pourquoi dans le programme de test c++ on inclut FonctionsCpp.h
    ce qu'il nous faut c'est FonctionsC.h non ?

  11. #11
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Citation Envoyé par ikuzar Voir le message
    Pourquoi dans le programme de test c++ on inclut FonctionsCpp.h
    ce qu'il nous faut c'est FonctionsC.h non ?
    Pour avoir accès aux fonctions qui sont purement C++ (notamment la dernière, fonction11).
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  12. #12
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    630
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 630
    Points : 234
    Points
    234
    Par défaut
    D'acc.
    Pour simplifier j'ai garder que les 3 premières fonctions. Ce que je dois faire dans un premier temps c'est d'utiliser des fonctions dans un code écrit en C++.

    J'ai d'abord créer le fichier objet correspondant au FonctionsC.c :
    Puis j'ai compilé le tout ... :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    moi@moi-G73Jh:~/C_CPP$ g++ -Wall -o main main.cpp
    /tmp/ccnAp3YM.o: In function `main':
    main.cpp:(.text+0xf): undefined reference to `fonction1'
    main.cpp:(.text+0x41): undefined reference to `fonction2'
    main.cpp:(.text+0x6e): undefined reference to `fonction3'
    collect2: ld returned 1 exit status
    Apparemment il trouve pas la librairie C ( FonctionC.o) que j'ai crée ...

  13. #13
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Il ne va pas la trouver tout seul, non Il faut rajouter le fichier à la liste des objets avec lequel le programme doit être lié.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    g++ -o main main.cpp FonctionC.o
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  14. #14
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    630
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 630
    Points : 234
    Points
    234
    Par défaut
    D'acc. ca marche, merci.
    Sinon j'aimerais pourquoi ceci ne marche pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g++  -Wall -o main main.cpp -L.
    En gros quand est ce que je dois mettre un -L ... pour indiquer au compilateur ou chercher la (les) librairie(s) ?

  15. #15
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    -L. ça rajoute un chemin de recherche des fichiers .a, mais je ne pense pas que ça marche pour les .o.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  16. #16
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par ikuzar Voir le message
    D'acc. ca marche, merci.
    Sinon j'aimerais pourquoi ceci ne marche pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g++  -Wall -o main main.cpp -L.
    Comme l'indique Médinoc, -L permet de rajouter un chemin où aller chercher les bibliothèques.

    Ça ne rajoute pas de fichier ou de bibliothèque.

  17. #17
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    630
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 630
    Points : 234
    Points
    234
    Par défaut
    J'aimerais comprendre un peu comment fonctionne ces macros :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #ifndef EXTERN_C
    #ifdef __cplusplus
    #define EXTERN_C extern "C"
    #else
    #define EXTERN_C
    #endif
    #endif
    1) Dans quel fichier écrit - on #define __cplusplus ? dans le_fichier.cpp qui inclut le_fichier.h contenant les macros ci-dessus ?
    2) le #else #define EXTERN_C sert à quoi ?

    Merci d'avance pour votre aide.

  18. #18
    screetch
    Invité(e)
    Par défaut
    1) c'est définit automatiquement par le compilateur si celui-ci compile du C++
    2) pour remplacer EXTERN_C par une chaine vide, sinon le préprocesseur laissera EXTERN_C dans le code final et le compilateur ne connaitra pas ce EXTERN_C

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Utilisation de MAX dans une requête SQL
    Par Evil onE dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/06/2004, 18h38
  2. Utilisation fonction définie dans un .Dll
    Par jeab. dans le forum Windows
    Réponses: 5
    Dernier message: 23/03/2004, 16h23
  3. Réponses: 3
    Dernier message: 11/03/2004, 10h58
  4. impossible d'utiliser ma fonction dans un insert
    Par caramel dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 10/04/2003, 15h04
  5. Utilisation de Pointeurs dans API windows
    Par Drooxy dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 13/03/2003, 22h39

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