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 :

melanger des fonctions c avec du c++


Sujet :

C++

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    502
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 502
    Points : 227
    Points
    227
    Par défaut melanger des fonctions c avec du c++
    bonsoir ,

    est ce possible de melanger des fonctions c avec du c++ dans le même fichier ?



    merci !

  2. #2
    Membre expérimenté
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Points : 1 685
    Points
    1 685
    Par défaut
    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++").

  3. #3
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 611
    Points
    30 611
    Par défaut
    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

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    502
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 502
    Points : 227
    Points
    227
    Par défaut
    merci !

  5. #5
    Membre expérimenté
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Points : 1 685
    Points
    1 685
    Par défaut
    Bonsoir,

    Citation Envoyé par koala01 Voir le message
    Il est impossible d'utiliser des fonctions C++ en C.
    Il me semble que c'est possible :
    http://www.parashift.com/c++-faq-lit...c-and-cpp.html

    C'est l'item 32.6

  6. #6
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 611
    Points
    30 611
    Par défaut
    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:
    • 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
    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.

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

    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. appeler des fonctions javascript avec php
    Par thaundeadboss dans le forum Langage
    Réponses: 1
    Dernier message: 11/12/2009, 12h18
  2. Création des fonctions personnalisées avec mysql
    Par mutkas10 dans le forum Débuter
    Réponses: 3
    Dernier message: 24/06/2009, 18h41
  3. Réponses: 5
    Dernier message: 28/04/2006, 15h40
  4. Compilation avec des fonctions virtuel pure
    Par vanitom dans le forum C++
    Réponses: 4
    Dernier message: 16/12/2005, 15h37
  5. petit souci avec des variables avec des fonctions psql
    Par dust62 dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 02/04/2005, 14h45

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