IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Du C dans du C++


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 241
    Par défaut Du C dans du C++
    Bonjour,

    Voila, j'aimerai réutiliser un ancien code C dans du code C++, est-ce possible?

    Merci.

  2. #2
    Membre éclairé
    Avatar de warubi
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    399
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 399
    Par défaut
    Ca depend et en plus tu ne beneficiera pas des avantages du c++ (les objets...)

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 180
    Par défaut
    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 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    //code c++
    //code C
    //code c++
    fait

    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++
    Sinon tu risque de t'embrouiller voir, dans un cas extrème, que ton code ne compile pas.

  4. #4
    Membre émérite
    Avatar de mamelouk
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    867
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 867
    Par défaut


    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

  5. #5
    Membre expérimenté
    Avatar de David Fleury
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 253
    Par défaut
    Citation Envoyé par mamelouk

    je capte rien. les compilateurs C++ ne savent pas compiler du C ????
    Ils devraient ? C++ c'est pas du C, et plus ça va plus ça va être difficile.
    (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.

  6. #6
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    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:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    extern "C" void fonction(int, int);
    Thierry
    "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++

    +

  7. #7
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Citation Envoyé par mamelouk


    je capte rien. les compilateurs C++ ne savent pas compiler du C ????
    C et C++ sont deux langages différents :
    http://nicolasj.developpez.com/artic...ompatibilites/

  8. #8
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    extern "C" active le linkage compatible C, et du coup empêche l'overloading.

  9. #9
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    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.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 241
    Par défaut
    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++ ?
    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?

  11. #11
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Copie / colle ton code C dans ton projet C++, et vois si tu as des erreurs de compilation.

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 241
    Par défaut
    Ok merci, avec tous vos conseils je suppose que je parviendrai à mes fins. :-)

  13. #13
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Citation Envoyé par Laurent Gomila
    Copie / colle ton code C dans ton projet C++, et vois si tu as des erreurs de compilation.
    C'est crade, quand même.

    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.

  14. #14
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    C'est crade, quand même.
    Le danger ce serait que ça compile mais que ça ait un comportement différent.
    Il y a quand même très peu de chances que ça arrive.

  15. #15
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    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.

  16. #16
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    * Si on parle de C90, on peut jouer avec les commentaires:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    x = a//* Na! */ 2
          + 1;
    * sizeof('a') retourne 1 en C++ et la meme valeur que sizeof(int) en C.
    * 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.

  17. #17
    Membre expérimenté
    Avatar de David Fleury
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 253
    Par défaut
    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

Discussions similaires

  1. DBLookupComboBox dans DBGrid
    Par KThrax dans le forum Bases de données
    Réponses: 7
    Dernier message: 24/08/2004, 15h18
  2. gérer les jpg dans une fenetre directdraw???
    Par Anonymous dans le forum DirectX
    Réponses: 1
    Dernier message: 14/06/2002, 13h39
  3. enregistrer dans un fichier avec une appli mdi
    Par ferrari dans le forum C++Builder
    Réponses: 4
    Dernier message: 05/05/2002, 15h17
  4. faire un selection dans une image aves les APIs
    Par merahyazid dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/04/2002, 10h44
  5. Documentation DirectX dans C++Builder 3
    Par srvremi dans le forum DirectX
    Réponses: 1
    Dernier message: 26/04/2002, 09h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo