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 :

Appel C++ depuis le C


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2002
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 168
    Par défaut Appel C++ depuis le C
    Bonjour,

    j'ai la structure des fichiers suivantes et je vous épargne les détails :

    test.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #include xxxx
    #include yyyy
    
    process_function (..........);
    et le fichier test.C qui contient le corps de la fonction process_function

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ............
    process_function (.............)
    {
    }
    ............
    dans un autre fichier fichier.c, je dois appeler la fonction process_function, donc comment faire ?

    et aussi une autre question, par rapport à la syntaxe de Makefile, est ce qu'on peut mélanger du c et du c++, exemple :

    SOURCES = test.c \
    test.C

    merci,

    Turbo_chess

  2. #2
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    Citation Envoyé par turbo_chess
    dans un autre fichier fichier.c, je dois appeler la fonction process_function, donc comment faire ?
    Il suffit d'inclure le fichier d'en-tête comprenant le prototype de la fonction (test.h ici). Après cela, il est possible d'appeler la fonction.
    Citation Envoyé par turbo_chess
    et aussi une autre question, par rapport à la syntaxe de Makefile, est ce qu'on peut mélanger du c et du c++
    En général, j'essaie d'éviter car cela m'a déjà causé des problèmes. Désolé, je ne peux vous répondre précisément.

  3. #3
    Membre émérite Avatar de valefor
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    711
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 711
    Par défaut
    Je pense qu'il faudrait regarder du côté d'un truc qui s'appelle
    Pour ce qui est du makefile, cela dépend de la manière dont tu vas utiliser la variable SOURCES.

  4. #4
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    extern C, c'est pour appeler du C depuis le C++. Ici, on demande le contraire. Le cas general est que ce n'est pas possible. Si le prototype de la fonction C++ ne contient rien de specifique a ce langage (classes, references, this, ...), on peut bidouiller (les conventions d'appel, notamment) mais c'est rarement utile: il vaut mieux tout faire en C++.

  5. #5
    Membre émérite Avatar de valefor
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    711
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 711
    Par défaut
    La librairie ODE est implémentée en C++ mais propose une interface en C. Comme les sources sont disponibles, on peut voir dedans !

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Par défaut
    Toutes les déclarations des fonctions C++ que tu veux pouvoir appeler depuis du C doivent être encadrées par extern "C" { et }.
    Le nommage de ces fonctions doit respecter la syntaxe du C.

    Pour la compilation, tu ne pourras pas te contenter de lier tes fichiers objets (ah moins que quelqu'un ait une solution simple )

    Le mieux est de construire une librairie dynamique avec tes sources C++ et de linker le programme C contre la librairie.

    Tu te douteras alors que pour ta question sur les Makefiles, on ne peux pas mixer des sources C et C++ comme ça ...

    ... à moins de faire tout en C++ ce qui est encore la meilleure solution.

    EDIT: A la réflexion, en relisant le premier message, ton problème a l'air plus simple. Qu'entends-tu par appel C++ ? Comme le dis stephl, il suffit d'inclure "test.h" au début de fichier.c. Et de faire du C ou du C++ mais pas les deux.

  7. #7
    Membre confirmé
    Inscrit en
    Juillet 2002
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 168
    Par défaut
    Bonjour,

    merci pour vos conseils.

    1) quand on travaille sur un projet déjà existant ou bien quand on fait de la maintenance, on a pas le droit de tout changer, dans mon cas vaut mieux que j'appele la fonction c++ depuis mon fichier C.

    2) pour le makefile, pas de problème , on peux mélanger du c++ avec du c et les objets sont générés.

    3)ça marche, j'ai déclaré mon .h qui contient ma fonction et un fichier c++ qui contient le corps de ma fonction, j'ai compilé le fichier ça passe.

    dans le fichier c, j'ai include la bibliothèque sui contient ma focntion c++ comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #ifdef __cplusplus
    extern "C" #include "fichiercontientfonctioncpp.h"
    #endif /* __cplusplus */
    et dans ce fichier c , j'appelle ma fonction c++ sans problème.

    si quelqu'un a une bonne idée je suis preneur.

    j'aurais aimé travailler autrement mais là j'ai pas le choix.

    merci.

    Turbo_chess

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

Discussions similaires

  1. Appeler Scilab depuis Visual C++
    Par bassabo dans le forum Scilab
    Réponses: 1
    Dernier message: 20/05/2006, 17h22
  2. Réponses: 1
    Dernier message: 14/04/2006, 13h04
  3. [PERL et JAVA] Appeler PERL depuis JAVA
    Par krusty dans le forum Modules
    Réponses: 4
    Dernier message: 05/04/2006, 21h49
  4. Liveconnect avec Opera 8.5 (appel Java depuis JavaScript)
    Par Gregory3000 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 13/10/2005, 08h32
  5. Appels DCOM depuis une application Unix
    Par Dinaïz dans le forum Windows
    Réponses: 1
    Dernier message: 26/08/2005, 13h53

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