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 :

appeler une fonction externe à partir d'un main.cpp


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 199
    Par défaut appeler une fonction externe à partir d'un main.cpp
    Bonjour à tous.

    J'ouvre un nouveau fil de discussion pour continuer ce sujet du "projet de test".

    Medinoc a écrit :
    rien n'empêche de faire toto_main.cpp, tata_main.cpp, et d'appeler tout ça depuis le vrai main quand on fait les tests...
    Je dois avouer que je suis incapable d’appeler un main() (ou avec un autre nom d'ailleurs) d'un fichier .cpp différent du main principal. J'ai tenté un test et j'ai lamentablement échoué.

    Au préalable, j'ai appris qu'on ne devait pas faire un include d'un fichier .cpp.

    Le code du fichier appelé (Affichage.cpp) est les suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    #ifndef DEF_AFFICHAGE
    #define DEF_AFFICHAGE
     
    #include <iostream>
     
    using namespace std;
     
    int main()
    {
    	cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
    	return 0;
    }
     
    #endif
    Par précaution j'ai rajouté les lignes pour empêcher une inclusion multiple, mais je ne pense pas que ce soit nécessaire.

    Là où ça se complique, c'est pour appeler cette fonction main() à partir d'un fichier main.cpp, dont le code pourrait être celui-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    using namespace std;
     
    int main() {
    	Affichage::main();
    	return 0;
    }
    ...mais, bien sûr ça ne marche pas car le main() de Affichage.cpp n'est pas défini à la compilation.

    Je suis un peu confus de demander une aide sur ce point , mais quelle est la bonne syntaxe pour appeler le main() de Affichage.cpp, si toutefois on peut appeler directement une fonction d'un .cpp sans passer par un .h.

    Merci pour votre aide.

  2. #2
    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
    Personnellement je fais comme ça:
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    //TestAffichage.cpp
    #include <iostream>
     
    using namespace std;
     
    int testAffichage_main()
    {
    	cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
    	return 0;
    }
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    //_MonProjetTest.cpp
     
    int testAffichage_main();
    int autreTest_main();
    //etc.
     
    int main() {
    	return testAffichage_main();
    	//return autreTest_main();
    	//etc.
    }
    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.

  3. #3
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Y'a plus de fichier header en C++ ?
    Désolé ...

  4. #4
    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 jopopmk Voir le message
    Y'a plus de fichier header en C++ ?
    Désolé ...
    Disons que pour un projet du type "je fais des tests" je ne m'en embarrasse généralement pas.
    Les headers sont pour mes projets sérieux.
    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.

  5. #5
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    T'avais pas besoin de t'expliquer, c'était juste une mauvaise blague (ou une top blague dans la catégorie "bien pourriTe"). Quand j'ai vu son message à midi j'ai voulu lui faire une réponse un peu détaillée mais j'ai pas eu le temps (grosse journée ... grosse semaine d'ailleurs, d'où la blague "fatiguée").

    J'aurais bien fait un 'tit topo sur :
    - ce qu'est le point d'entrée d'un programme (fonction main ici),
    - la différence entre déclaration et définition,
    - les unités de compilations,
    - une petite remarque sur le #pragma once que tous les compilo connaissent maintenant.

    Mais là j'ai encore la flemme
    Pour tout ce qui est POO je laisse faire les experts.

    PS : il m'est déjà arrivé de mettre des définitions dans des headers pour des fonctions d'extension inline.
    Comme les goto/label c'est déconseillé, mais bien utilisé et avec parcimonie ça peut être un hack intéressant.

  6. #6
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    @KonTiKI : oui, c'est là où la compréhension des unités de compilation entre en jeu

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 199
    Par défaut
    Merci Medinoc.

    C'est - bien sur - la première fois que je vois une organisation de la syntaxe comme celle-ci.

    Dois-je comprendre que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int testAffichage_main();
    int autreTest_main();
    est bien le prototype de la fonction et qu'il vient donc en lieu et place d'un fichier d'entête .h qu'il conviendrait normalement de créer (comme semble s'en étonner jopopmk) ?

    En tous cas, cela marche bien et si c'est le cas cela va bien dans le raisonnement que je m'étais fait où je pensais qu'il fallait créer un .h pour que le compilateur puisse trouver la fonction.

    Par contre pas d'include car le prototype est directement écrit en préalable, dans le fichier où se trouve le main.

    Très bon cours aujourd'hui, je pense progresser.

  8. #8
    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 KonTiKI Voir le message
    Merci Medinoc.

    C'est - bien sur - la première fois que je vois une organisation de la syntaxe comme celle-ci.

    Dois-je comprendre que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int testAffichage_main();
    int autreTest_main();
    est bien le prototype de la fonction et qu'il vient donc en lieu et place d'un fichier d'entête .h qu'il conviendrait normalement de créer[...] ?
    Oui, c'est bien ça.
    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.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 07/04/2008, 14h58
  2. Réponses: 4
    Dernier message: 09/11/2007, 14h24
  3. [Boost.Function] Appeler une fonction "externe"
    Par poukill dans le forum Boost
    Réponses: 17
    Dernier message: 29/08/2007, 16h04
  4. Réponses: 4
    Dernier message: 28/07/2006, 14h01
  5. Réponses: 12
    Dernier message: 12/05/2006, 09h21

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