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 :

erreur mais je ne vois pas où


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de razily
    Inscrit en
    Février 2009
    Messages
    376
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 376
    Par défaut erreur mais je ne vois pas où
    Bonjour ,
    cela fait qlq mois que , je débute en C , j'essai de faire une programmation modulaire en séparant les fichiers sources .c et les headers .h mais le compilateur m'affiche une erreur gênante que j'avais du mal à retrouver !!

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    include <stdio.h>
    #include <stdlib.h>
    #include "fonction.h"
     
     
    int main ( )
    {
        int element;
        int valeur1,valeur2;
     
        printf("Hello world!\n");
        printf ("je suis libre les gars \n");
     
        printf ("entrer votre mot de passe :\n");
        scanf("%d", &element);
     
        printf ("entrer deux nombres:\n");
        scanf("%d %d ", &valeur1,&valeur2);
     
         printf ("la somme des  deux nombres: %d\n",mafonctionsomme(valeur1,valeur2));
     
        printf ("la difference des  deux nombres: %d\n",mafonctiondifference(valeur1,valeur2));
     
        return 0;
     
    }
    dans fonction.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #ifndef _FONCTION
    #define _FONCTION
    #include <stdlib.h>
    int mafonctionsomme (int a , int b);
     
    int mafonctiondifference(int a,int b;
    #endif
    dans fonction.c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #include "fonction.h"
     
    int mafonctionsomme (int a , int b)
    {
        return a+b;
    }
     
    int mafonctiondifference(int a,int b)
    {
        return a-b;
    }
    erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sans_titre.c:29: erreur: expected «;», «,» or «)» before «{» token
    en tout cas l'erreur porte su l'accolade juste après main () pourtant cela me semble correct ..

    merci pour vos réponses !!


  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 115
    Par défaut
    Citation Envoyé par razily Voir le message
    dans fonction.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #ifndef _FONCTION
    #define _FONCTION
    #include <stdlib.h>
    int mafonctionsomme (int a , int b);
    
    int mafonctiondifference(int a,int b;
    #endif

  3. #3
    Membre éclairé Avatar de razily
    Inscrit en
    Février 2009
    Messages
    376
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 376
    Par défaut
    mais c'est vrai !! c'est tellement difficile de détecter une erreur comme çà vu qu'il y a plusieurs fichiers !! maintenant quand j'execute y a ces erreurs:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    /tmp/ccIDT8db.o: In function `main':
    sans_titre.c:(.text+0x7c): undefined reference to `mafonctionsomme'
    sans_titre.c:(.text+0xa4): undefined reference to `mafonctiondifference'
    Compilation échouée.
    et quand j'ai essayé de changer le #include"fonction.h" par "fonction.c" çà marche et je ne comprends plus s'il faut insérer le .h ou le .c dans main !!
    j'ai vu sur le site qu'il insère le headers .h dans main !!
    est ce que quelqu'un peut m'expliquer cela ??
    autre remarque aussi , si vous executez ce code , il faudrait que vous tapez 3 chiffres sépraés pour que çà marche !! et il fai les calculs sur les deux premiers , en tout cas c'est un problème de saut à la ligne !! probablement !!

    mais en tout cas Merci à toi Tusbar d'avoir corrigé sur ce petit point (parenthèse) car je ne l'ai jamais remarqué !!


  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par razily Voir le message
    mais c'est vrai !! c'est tellement difficile de détecter une erreur comme çà vu qu'il y a plusieurs fichiers !! maintenant quand j'execute y a ces erreurs:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    /tmp/ccIDT8db.o: In function `main':
    sans_titre.c:(.text+0x7c): undefined reference to `mafonctionsomme'
    sans_titre.c:(.text+0xa4): undefined reference to `mafonctiondifference'
    Compilation échouée.
    et quand j'ai essayé de changer le #include"fonction.h" par "fonction.c" çà marche et je ne comprends plus s'il faut insérer le .h ou le .c dans main !!
    j'ai vu sur le site qu'il insère le headers .h dans main !!
    est ce que quelqu'un peut m'expliquer cela ??
    Facile !!!

    Dans ton .h, tu définis un(des) prototype(s)

    Mais comme tu ne les définis pas comme "extern", le linker s'attend à les trouver dans le module où ils sont déclarés.

    En incluant "fonction.h" dans "fonction.c", tu "écrases" les déclarations.
    En incluant "fonction.h" dans "main.c", tu déclares juste.. mais il n'y a pas de fonctions correspondantes..

    Si tu fais :

    fonction.h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    extern int mafonction..();
    main.c


    fonction.c

    rien (ou l'inclusion si tu veux, mais pas recommandé)

    ça va marcher (à condition de lier avec le .o)

  5. #5
    Membre confirmé Avatar de Topeur
    Profil pro
    Inscrit en
    Février 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 91
    Par défaut Intrigué
    Bonjour souviron,

    Je suis assez étonne par ta réponse, car j'ai toujours programmé en ne faisant pas ce que tu conseilles de faire

    J'ai 3 fichiers
    main.c
    fonction.c
    fonctions.h

    Voici l'inclusion que je ferai
    main.c -> fonction.h
    fonction.c -> fonction.h
    fonction.h -> les lib comme stdio
    Et ca marche

    du coup je cherche a comprendre, est ce que c'est Visual qui me joue des tours lors de la compilation ou est ce correct ?

  6. #6
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    du coup je cherche a comprendre, est ce que c'est Visual qui me joue des tours lors de la compilation ou est ce correct ?
    Non, c'est correct. Les fonctions sont extern par défaut, et il n'est pas nécessaire de le faire explicitement. La déclaration de leur prototype dans un .h et l'inclusion de ce .h dans un .c ne sert pas à les rendre extern mais permet au compilateur de connaître le type retourné par les fonctions et le type des paramètres.

    fonction.c doit normalement inclure fonction.h (pour assurer la cohérence définition/déclaration au niveau de l'unité de compilation)

    Si pour la compilation de l'unité "fonction", on a besoin d'inclure un autre .h (par exemple <stdio.h> parce qu'il définit FILE), la question se pose de l'inclure dans fonction.c ou fonction.h . Si l'inclusion dans le .c permet la compilation, alors il doit être inclus dans le .c et non dans le .h .

  7. #7
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    Facile !!!

    Dans ton .h, tu définis un(des) prototype(s)

    Mais comme tu ne les définis pas comme "extern", le linker s'attend à les trouver dans le module où ils sont déclarés.

    En incluant "fonction.h" dans "fonction.c", tu "écrases" les déclarations.
    En incluant "fonction.h" dans "main.c", tu déclares juste.. mais il n'y a pas de fonctions correspondantes..
    Euh, non, pas du tout. et 'extern' n'a rien à voir. Devant un prototype de fonction, il a une valeur purement documentaire en C.

    Si tu fais :

    fonction.h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    extern int mafonction..();
    main.c


    fonction.c

    rien (ou l'inclusion si tu veux, mais pas recommandé)

    ça va marcher (à condition de lier avec le .o)
    L'inclusion est tout à fait recommandée :

    http://video.google.com/videoplay?do...17817010204120

  8. #8
    Membre éclairé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Août 2007
    Messages
    509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Août 2007
    Messages : 509
    Par défaut
    Citation Envoyé par razily Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #include <stdio.h>
    #include <stdlib.h>
    #include "fonction.h"

Discussions similaires

  1. Bête erreur de syntaxe mais je ne vois pas
    Par ETVigan dans le forum Langage
    Réponses: 4
    Dernier message: 02/05/2010, 18h37
  2. Erreur grossière mais je ne vois pas
    Par Oxygn44 dans le forum Langage
    Réponses: 5
    Dernier message: 10/11/2008, 10h36
  3. Erreur mais je ne vois pas où
    Par aureliegro dans le forum Langage SQL
    Réponses: 4
    Dernier message: 10/05/2007, 10h28
  4. erreur de syntaxe, mais je ne vois pas
    Par Argorate dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 18/08/2006, 12h12
  5. Réponses: 7
    Dernier message: 30/10/2005, 12h54

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