Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3305 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [C/C++] Comment mélanger C et C++ ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C/C++] Comment mélanger C et C++ ?

n°1458477
nanawel
Posté le 17-10-2006 à 07:21:14  profilanswer
 

Salut à tous,  
 
Voilà j'ai 2 fichiers qui gèrent les liste chainées simples (ListeSimple.c et ListeSimple.h) écrits en C "pur". Lorsque je fais une directive include dans un fichier test.C (en C++) et que j'essaie d'appeler une fonction implémentée dans le fichier ListeSimple.c la compilation me génère une erreur :  
 

Code :
  1. test.o : Dans la fonction "main()":/[...]/src/test.C:14: référence indéfinie vers « sll_new()   »
  2. test.o : Dans la fonction "main()":/[...]/src/test.C:26: référence indéfinie vers « sll_insert(sll*, void*)»


 
Alors que les fonctions en question "sll_new()" et "sll_insert()" sont bien présentes et implémentées dans le fichier ListeSimple.c/h !
 
Je galère sur cette erreur (toute bête j'espère) depuis un moment et je vois pas d'où ça peut venir, à part d'une subtilité à faire pour mélanger C et C++.  
 
Que ceux qui ont une idée m'apporte un peu d'espoir svp :)

mood
Publicité
Posté le 17-10-2006 à 07:21:14  profilanswer
 

n°1458500
bb138
La vie est belle ...
Posté le 17-10-2006 à 08:48:22  profilanswer
 

Avant tout, pourquoi utiliser des listes faites en C dans un programme C++ ? De telles choses existent déjà !!! (cf. STL)
 
Sinon pour ton problème montre un peu ton code, cela peut aider.

n°1458505
Emmanuel D​elahaye
C is a sharp tool
Posté le 17-10-2006 à 08:58:23  profilanswer
 

nanawel a écrit :

Voilà j'ai 2 fichiers qui gèrent les liste chainées simples (ListeSimple.c et ListeSimple.h) écrits en C "pur". Lorsque je fais une directive include dans un fichier test.C (en C++) et que j'essaie d'appeler une fonction implémentée dans le fichier ListeSimple.c la compilation me génère une erreur :  


Il est tout à fait possible d'utiliser des fonctions écrites (et compilées) en C dans un projet C++. Il suffit d'indiquer au compilateur C++ qu'il doit utiliser les noms 'purs' du C et non des noms 'décorés' du C++.  
 
Il y a donc une précaution à prendre au niveau du header :
 
Il faut encadrer la définition des prototypes par  

Code :
  1. /* *.h */
  2. extern "C"
  3. {
  4.    ...
  5. }


Pour rester compatible avec le C (extern "C" n'est pas du C, c'est du C++), on active ces instructions uniquement en C++ :

Code :
  1. /* *.h */
  2. #ifdef __cplusplus
  3. extern "C"
  4. {
  5. #endif
  6.    ...
  7. #ifdef __cplusplus
  8. }
  9. #endif

Message cité 1 fois
Message édité par Emmanuel Delahaye le 17-10-2006 à 08:59:34

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1458868
nanawel
Posté le 17-10-2006 à 15:45:34  profilanswer
 

Emmanuel Delahaye a écrit :

Il est tout à fait possible d'utiliser des fonctions écrites (et compilées) en C dans un projet C++. Il suffit d'indiquer au compilateur C++ qu'il doit utiliser les noms 'purs' du C et non des noms 'décorés' du C++.  
 
Il y a donc une précaution à prendre au niveau du header :
 
Il faut encadrer la définition des prototypes par  

Code :
  1. /* *.h */
  2. extern "C"
  3. {
  4.    ...
  5. }




 
Ah ben la voilà la subtilité que je cherchais ! Merci beaucoup Emmanuel je teste dès ce soir et je tiens au courant du résultat !

n°1459046
nanawel
Posté le 17-10-2006 à 18:17:06  profilanswer
 

Ok merci c'était bien ça !
Encore merci et bonne journée !

n°2202776
jflacroix
Posté le 12-09-2013 à 22:33:10  profilanswer
 

Bonjour.
 
Un grand merci. :hello:  
Comme quoi même après plusieurs années c'est un post super utile.
Cela fait 2 jours que je galère pour faire l'édition de liens. :heink:  
 
Merci.
 
jf


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [C/C++] Comment mélanger C et C++ ?

 

Sujets relatifs
Mélanger différentes sourcesMelanger une liste
mélanger langage dans c#[HTML & PHP] je sais que faut pas mélanger :ange: mais bon...
Reconstituer un mot qui a été mélangerPHP GD, melanger 2 IMAGES, un PNG semi transparent et un PNG "normal"
Mélanger XHTML et XSL[Direct3D] Mélanger les effets DotProduct3 et Texture
[DirectX] mélanger 2D et 3D[vc++] Melanger macros dans un Add-ins
Plus de sujets relatifs à : [C/C++] Comment mélanger C et C++ ?


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)