Bonjour,
Voila, j'aimerai réutiliser un ancien code C dans du code C++, est-ce possible?
Merci.
Version imprimable
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 :
faitCode:
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:
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.Citation:
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:
ThierryCode:extern "C" void fonction(int, int);
C et C++ sont deux langages différents :Citation:
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
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?Citation:
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.
Ok merci, avec tous vos conseils je suppose que je parviendrai à mes fins. :-)
C'est crade, quand même.Citation:
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...
Le danger ce serait que ça compile mais que ça ait un comportement différent.Citation:
C'est crade, quand même.
Il y a quand même très peu de chances que ça arrive.
8O Je suis curieux de voir ça,ne serait-ce qu'un aperçu car comme tu disCitation:
Le danger ce serait que ça compile mais que ça ait un comportement différent.
Citation:
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:
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