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 :

[débutant] fonction s'exécutant en C mais pas en C++


Sujet :

C++

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 128
    Points : 122
    Points
    122
    Par défaut [résolu][débutant] fonction s'exécutant en C mais pas en C++
    Bonjour à tous!

    Cette question a déjà du être posée plusieurs fois, mais même en faisant une recherche sur internet et sur quelques tutoriaux de ce site, je n'ai pas trouvé la solution.

    Voilà j'arrive à compiler le programme suivant en langage c mais pas en c++:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <stdio.h>
     
    int main(void){
     
     
      void fonct1(int s){
        printf("%d\n", s);
        }
     
      fonct1(3);
     
    }
    Le debugger affiche alors:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    fonctionc++3.cpp: In function `int main()':
    fonctionc++3.cpp:7: error: a function-definition is not allowed here before '{' token
    fonctionc++3.cpp:7: error: expected `,' or `;' before '{' token
    Si je créé un prototype de la fonction en rajoutant la ligne
    avant le main, le problème est toujours là.

    J'utilise gcc pour compiler en c et g++ pour le c++.

    Merci.

  2. #2
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Le code que tu montres n'est ni du C ni du C++ mais utilise une extension de gcc. Si tu utilises avec gcc, tu auras alors une erreur du genre:
    error: ISO C forbids nested functions
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Octobre 2005
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 39
    Points : 37
    Points
    37
    Par défaut
    as tu essayé d'écrire l'autre fonction en dehors de main. :

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 128
    Points : 122
    Points
    122
    Par défaut
    Citation Envoyé par gilleski2010
    as tu essayé d'écrire l'autre fonction en dehors de main. :
    Bien vu! Ca marche! J'ai l'habitude de java où toutes les instructions s'écrivent dans le main (pour les fichiers utilisant la fonction principale).
    Merci à toi.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 128
    Points : 122
    Points
    122
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet
    Le code que tu montres n'est ni du C ni du C++ mais utilise une extension de gcc. Si tu utilises avec gcc, tu auras alors une erreur du genre:
    error: ISO C forbids nested functions
    En réécrivant le programme avec la fonction en dehors du main, et en compilant avec les arguments que tu as indiqués, il n'y a pas d'erreurs.

    Tu dis que le code n'est pas du c ou du c++???

  6. #6
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par goran kajfes
    Citation Envoyé par Jean-Marc.Bourguet
    Le code que tu montres n'est ni du C ni du C++ mais utilise une extension de gcc. Si tu utilises avec gcc, tu auras alors une erreur du genre:
    error: ISO C forbids nested functions
    En réécrivant le programme avec la fonction en dehors du main, et en compilant avec les arguments que tu as indiqués, il n'y a pas d'erreurs.
    C'est la définition d'une fonction à l'intérieur d'une autre fonction (nested function) qui n'est ni du C ni du C++ mais une extension de gcc (et pas de g++).
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 128
    Points : 122
    Points
    122
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet
    C'est la définition d'une fonction à l'intérieur d'une autre fonction (nested function) qui n'est ni du C ni du C++ mais une extension de gcc (et pas de g++).
    Oui en plus j'avais lu cette après-midi qu'en c++ on ne pouvait pas écrire une fonction dans une autre fonction. Mais bon, sachant que gcc est capable de le compiler je ne vais pas me gêner. En tout cas, merci de me raffraichir la mémoire.

  8. #8
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    sachant que gcc est capable de le compiler
    En fait, j'ai des doutes sur le fait que GCC compile celà. Et puis quand bien même il le ferai, ce n'est pas une bonne idée de le faire, tout simplement parce que ton code ne compilera pas si tu es sur un autre compilateur. Essaie d'écrire du code C ou C++ correct et conforme à la norme , c'est pour ton bien ...

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 128
    Points : 122
    Points
    122
    Par défaut
    J'ai modifié mes programmes en les écrivant de façon plus conventionnelle. Tu as raison PRomu@ld, autant prendre les bonnes habitudes dès le départ.

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

Discussions similaires

  1. Problème d'exécution en release mais pas en debug (2)
    Par animageo dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 15/11/2007, 14h22
  2. Problème Exécution en Release mais pas en Debug
    Par nono27200 dans le forum VB 6 et antérieur
    Réponses: 67
    Dernier message: 08/11/2007, 16h55
  3. Réponses: 10
    Dernier message: 07/07/2007, 10h48
  4. fonction javascript fonctionnant sous firefox mais pas sous IE
    Par calitom dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 06/03/2007, 12h56
  5. Fonction qui marche sous FF mais pas IE
    Par Oluha dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 25/01/2006, 14h07

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