Bonjour,
Voila, j'aimerai réutiliser un ancien code C dans du code C++, est-ce possible?
Merci.
Bonjour,
Voila, j'aimerai réutiliser un ancien code C dans du code C++, est-ce possible?
Merci.
Ca depend et en plus tu ne beneficiera pas des avantages du c++ (les objets...)
Il me semble qu'il suffit de mettre un extern "C" autour de ton code :
extern "C" { //ton code C }
Mais je crois que ça ne marche que si ton code est constité d'un ensemble de fonctions.
Ne fais pas un truc du genre :
fait
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 //code c++ //code C //code c++
Sinon tu risque de t'embrouiller voir, dans un cas extrème, que ton code ne compile pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 extern "C" { void f_c(); } //code c++ f_c(); //code c++
![]()
je capte rien. les compilateurs C++ ne savent pas compiler du C ????
j'avais jamais remarqué, parce que je connais plein de gens qui continuent à écrire comme en C (que des structs et des fonctions, utilisant des pointeurs, char*), avec qq trucs du C++ (std::list par exemple) et ca marche très bien
Ils devraient ? C++ c'est pas du C, et plus ça va plus ça va être difficile.Envoyé par mamelouk
(le C divergeant du C++ de plus en plus)
Quand tu dis réutiliser du code, tu veux appeler des fonctions d'une lib en C ou tu veux recompiler un source C avec un compilo C++ ?
Dans le premier cas, c'est plutôt les extern "C",
dans le deuxième tu changes l'extension du source de .c à .cpp (ou ce que tu veux), et tu recompiles en C++ (et prie).
Dans tous les cas, c'est "plus ou moins" comme dirait loufoque (peut être moins que plus d'ailleurs)
Après, tu peux réécrire ton source en changeant les char* par des std::string
par exemple (après tout tu as déjà vu les std::list), et les pointeurs par des références.
Voici un petit apperçu des incompatibilités entre le C et le C++: http://nicolasj.developpez.com/artic...ompatibilites/
En ce qui concerne les fonctions, une grande différence entre les fonctions C et les fonctions C++ réside au niveau du code assembleur généré par le compilateur. En effet, en C++, les nom de fonctions sont "décorés" selon qu'elles sont membres d'une classe ou pas, et selon leur prototype. Ce mécanisme de décoration des noms de fonction permet notamment d'implanter la surcharge des fonctions.
Si on désire utiliser une fonction C dans du code C++, il faut informer le compilateur que le nom de la fonction en question n'est pas décoré en utilisant la syntaxe:
Thierry
Code : Sélectionner tout - Visualiser dans une fenêtre à part extern "C" void fonction(int, int);
"The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
"If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow
FAQ-Python FAQ-C FAQ-C++
+
C et C++ sont deux langages différents :Envoyé par mamelouk
http://nicolasj.developpez.com/artic...ompatibilites/
extern "C" active le linkage compatible C, et du coup empêche l'overloading.
Un exemple détaillé de ce qu'on peut faire dans ce thread:
http://www.developpez.net/forums/sho...d.php?t=256281
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.
J'aimerai recompiler un source C avec un compilo C++, clairement j'aimerai reprendre mon ancien code dans sa globalité et y inserrer des fonctions C++, encore plus clairement j'aimerai réutiliser un codec bas débit utilisant des bibliothèques GNU gsl et TSP écrit en C dans un code C++ pour faire un plugin VST avec une librairie VST SDK, encore plus clairement, j'aimerai réutiliser mon bloc de détection des harmoniques par la méthode des plus grands pics sur un modèle itératif d'analyse du résidu signal - son de synthèse pour faire un synthé additif? Ok?Quand tu dis réutiliser du code, tu veux appeler des fonctions d'une lib en C ou tu veux recompiler un source C avec un compilo C++ ?
Copie / colle ton code C dans ton projet C++, et vois si tu as des erreurs de compilation.
Mieux que SDL : découvrez SFML
Mes tutoriels 2D/3D/Jeux/C++, Cours et tutoriels C++, FAQ C++, Forum C++.
Ok merci, avec tous vos conseils je suppose que je parviendrai à mes fins. :-)
C'est crade, quand même.Envoyé par Laurent Gomila
Mais ça peut marcher.
Dans ce cas, je n'appelle pas ça réutiliser, par contre. J'appelle ça porter, ou convertir...
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.
Le danger ce serait que ça compile mais que ça ait un comportement différent.C'est crade, quand même.
Il y a quand même très peu de chances que ça arrive.
Le danger ce serait que ça compile mais que ça ait un comportement différent.Je suis curieux de voir ça,ne serait-ce qu'un aperçu car comme tu dis
Il y a quand même très peu de chances que ça arrive.
* Si on parle de C90, on peut jouer avec les commentaires:
* sizeof('a') retourne 1 en C++ et la meme valeur que sizeof(int) en C.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 x = a//* Na! */ 2 + 1;
* inline (present en C99) a une semantique differente de celle de C++; ca ne m'etonnerait pas qu'il soit possible d'ecrire quelque chose de conforme dans les deux langages avec un comportement different; mais je n'ai pas cherche a pousser dans cette voie-la.
Je ne vois pas d'autres differences silentieuses pour le moment, mais il est possible qu'il en en ai.
Il y a pas mal de choses par là
http://david.tribble.com/text/cdiffs.htm
L'init des char[x] pourrait poser des problèmes par exemple
Partager