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.
Partager