bonsoir ,
est ce possible de melanger des fonctions c avec du c++ dans le même fichier ?
merci !
bonsoir ,
est ce possible de melanger des fonctions c avec du c++ dans le même fichier ?
merci !
Bonsoir,
la réponse est oui.
Vous comptez appeler des fonctions C++ depuis un code C ou le contraire?
Il y a tout ce qu'il faut sur google... (recherche sur "mixing c and c++").
Salut,
Il est impossible d'utiliser des fonctions C++ en C.
Il est, par contre, possible d'utiliser des fonctions C en C++.
Cependant, il est généralement déconseillé de le faire, principalement parce que les possibilités offertes par C++ sont globalement plus sécurisantes et faciles à l'utilisation.
Cette possibilité d'utiliser les fonctions C en C++ est plutôt donnée afin de permettre d' "interfacer" des projets C avec des projets C++ ou dans un but de compatibilité
A méditer: La solution la plus simple est toujours la moins compliquée
Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
Compiler Gcc sous windows avec MinGW
Coder efficacement en C++ : dans les bacs le 17 février 2014
mon tout nouveau blog
Bonsoir,
Il me semble que c'est possible :
http://www.parashift.com/c++-faq-lit...c-and-cpp.html
C'est l'item 32.6
Non, cet item indique qu'il est possible de faire en sorte qu'une fonction C++ respecte, une fois compilée, les conventions d'appel de C.
C++ permet énormément de choses que C ne permet pas, dont:
Il est donc nécessaire de faire en sorte que, une fois compilées, toutes ces fonctions "portant le même nom" soient identifiables de manière personnelle et unique.
- La surcharge de fonction (le fait d'avoir deux fonctions portant le même nom mais acceptant des paramètres différents en nombre ou en types)
- La redéfinition de fonctions membres (le fait d'adapter le comportement d'une fonction membre en fonction du type réel de l'objet au départ duquel elle est appelée (polymorphisme) )
- Le fait que plusieurs type n'ayant strictement rien à voir entre eux puissent chacun disposer d'une fonction portant le même nom et acceptant les même paramètres
Les symboles sous lesquels ces fonctions seront connues doivent donc être tous différents de manière à ce que l'éditeur de liens (entre autres) puisse, à chaque appel de la fonction, faire exactement la liaison avec la fonction dont on est en droit de s'attendre à ce qu'elle soit utilisée.
C'est ce que l'on appelle le "mangeling" (ou est-ce "mangling", j'hésite sur l'orthographe) et c'est ce qui fait que les noms des fonctions compilées soient entourés d'une série de signes plus ou moins cabalistiques (que l'on remarque essentiellement lorsque l'éditeur de liens ne les trouve pas).
Le mot clé extern C permet "uniquement" d'éviter ce mangling (ou mangeling, je changerai une fois que j'aurai confirmation de l'orthographe ) de manière à ce que les symboles représentant la fonctions respectent la forme qu'ils auraient si la fonction avait été compilée avec un compilateur C.
Mais, si un compilateur C++ comprend l'ensemble du C, parce que C est un sous ensemble de C++, l'inverse n'est absolument pas vrai.
D'ailleurs, un compilateur C réagira dans certains cas différemment d'un compilateur C++ face à un certain nombre de mots clé pourtant présents dans les deux langages:
Pour ne donner qu'un exemple , penses simplement au fait que le mot clé "struct" définis automatiquement le type en question en C++ alors que, pour pouvoir utiliser le type défini par le mot clé struct, il faut passer par un typedef en C.
Un autre exemple est, justement, la séquence de termes "extern C" qui ne sera absolument pas reconnue par un compilateur C, mais qui sera obligatoire, si l'on utilise un compilateur C++, pour éviter le phénomène de mangling dont je parlais plus haut.
C'est la raison pour laquelle il faut, si tu ne veux pas commencer à manipuler un fichier d'en-tête adapté au compilateur C et un autre adapté au compilateur C++, passer par les instruction préprocesseur, sous une forme proche de
Quoi qu'il en soit, cela n'empêchera pas les fonctions de devoir être compilées par... un compilateur C++, même si, sous certaines conditions, cela permettra effectivement à un compilateur C de les utiliser (sous la forme de bibliothèques, statiques ou non).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 #ifdef __cplusplus__ extern "C" { #endif void foo(int, float, char *): /*...*/ #ifdef __cplusplus__ } #endif
Mais cela n'autorisera pas pour la cause la compilation, avec un compilateur C, d'une fonction écrite en C et d'une fonction écrite en C++ si elles se trouvent toutes deux dans le même fichier d'implémentation.
Par contre, si les deux fonctions se trouvent dans un même fichier d'implémentation, le compilateur C++ sera parfaitement capable de compiler les deux
A méditer: La solution la plus simple est toujours la moins compliquée
Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
Compiler Gcc sous windows avec MinGW
Coder efficacement en C++ : dans les bacs le 17 février 2014
mon tout nouveau blog
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager