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

Autres éditeurs Discussion :

[gcc] erreur de compilation


Sujet :

Autres éditeurs

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 21
    Par défaut [gcc] erreur de compilation
    Bonjour,
    Je suis face à un problème que j'ai déjà rencontré mais que je n'arrive pas à résoudre. Je dispose d'un fichier term.c et d'un header term.h.
    Voici à quoi ressemble mon term.c
    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
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    int main(int argc, char* argv[])
    {
       //Déroulement du main
    }
     
    int f1(int arg1,char* arg2)
    {
     ....
    }
     
    int f2(data_t* arg2, double arg3)
    {
      ....
    }
    Puis mon term.h ressemble à ceci:
    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
     
    #ifndef _TERM_H_
    #define _TERM_H_
    /*Déclaration des typedefs, defines utilisées et structures ou unions*/
    typedef struct data data_t;
    struct data
    {
      int mode;
      char* id;
    }
    /*Prototypes de fonctions*/
    int
    main(int, char**);
    int
    f1(int,char*);
    int
    f2(data_t*,double);
    #endif
    Je pense que ce que j'écris semble être correct. Mais ce que je voudrais savoir c'est pourquoi gcc lors de la compilation me génère une erreur du type:
    In file included from term.c:6:
    include/term.h:14: error: two or more data types in declaration specifiers
    term.c:11: error: conflicting types for ‘main’
    include/term.h:15: error: previous declaration of ‘main’ was here
    Franchement, si on pouvait m'expliquer là ou se situe mon erreur, je suis preneur. Il y a quelque chose que je n'ai certainement pas compris dans la compilation
    Cordialement,
    Johnny

  2. #2
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Il ne faut pas mettre le prototype de main dans ton .h

    La fonction main n'apparait que dans UN et UN SEUL fichier .c ou .cpp

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 21
    Par défaut
    Salut,
    Je te l'accorde le main dans le .h c'est de la grosse connerie. Néanmoins, lorsque j'enlève le main, gcc me génère la même erreur sur le premier prototype de fonction qu'il trouve. Je comprends vraiment pas ce qu'il veut gcc parfois. Pour moi, tout semble correct.

  4. #4
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Peux-tu poster un code compilable (même avec les erreurs)

    Mais sans les ... dans les fonctions.Le code tel que tu le compiles.

  5. #5
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Bonjour,

    D'après le code que tu as posté, tu n'inclus pas term.h dans term.c

    Le plus simple serait que tu postes un code minimal, mais compilable, qui reproduise la même erreur.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  6. #6
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 21
    Par défaut
    Salut,
    j'ai essayé de recompiler le petit bout de programme suite à vos indications et je n'ai plus obtenu les erreurs énoncés précedemment.J'ai créé un autre fichier pour pouvoir faire ce que je voulais vraiment. Néanmoins, j'obtiens toujours une erreur de compilation avec les mêmes fichiers.
    Je poste le term.c:
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    #include "term.h"
     
    int _lire_file(const char* path,user_list_t* user)
    {
    	FILE* fd;
     	char line[BUFSIZ];
    	if (NULL == (fd = fopen(path,"r")))
    	{
    		fprintf(stderr,"Unable to open file\n");
    		return -1;
    	}
    	while(fgets(line, BUFSIZ, fd))
    	{
    		printf("%s\n",line);
    		if (NULL != line) parse_line(line,&user);
    	}
    	if (!feof(fd))
    	{
    		fprintf(stderr,"Reading process failure!!\n");
    		return -1;
    	}
    	fclose(fd);
    	printf("\n");
    	return 0;
    }
     
    void parse_line(char* line,user_list_t** user)
    {
    	/*Ligne de type 127.0.0.1:7000@5060*/
    	user_list_t* tsukai;
    	char* p;
    	char* q;
    	char* tmp;
    	tsukai = (user_list_t*) malloc(sizeof*tsukai);
    	tmp = malloc(sizeof*tmp);
    	/*Adresse IP*/
    	p = strstr(line,":");
    	printf("%s\n",p);
    	if (NULL != p)
    	{
    		*p ='\0';
    		strcpy(tmp,line);
    		*p =':';
    	}
    	tsukai->ip = tmp;
    	/*Port serveur*/
    	p++;
    	q = strstr(p,"@");
    	printf("q:%s\n",q);
    	if (NULL != q)
    	{
    		*q = '\0';
    		strcpy(tmp,p);
    		*q = '@';
    	}
    	tsukai->port = tmp;
    	/*Port client*/
    	q++;
    	tsukai->port_clt = q;
    }
     
    int main(int argc,char* argv[])
    {
    	const char* path;
    	path = "/home/jro/doc/exosenc/uri.txt";
    	user_list_t* user;
    	user = (user_list_t*) malloc(sizeof*user);
    	_lire_file(path,user);
    	return 0;
    }
    et le term.h:
    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
    #ifndef _TERM_H_
    #define _TERM_H_
     
    typedef struct user_list user_list_t;
     
    struct user_list
    {
    	char* ip;
    	char* port;
    	char* port_clt;
    	struct user_list* next; 
    }
     
    int
    _lire_file(const char*, user_list_t*);
    void
    parse_line(char*, user_list_t**);
     
    #endif
    Bref, j'obtenais une erreur parce que j'avais baptisé une fonction read_file ou _read_file, donc j'ai modifié le nom en _lire_file. A la compilation, j'obtiens l'erreur suivante:
    In file included from term.c:5:
    term.h:13: error: two or more data types in declaration specifiers
    Mon problème de compréhension ne vient pas du tout de la langue anglaise mais je ne vois pas du tout à quoi gcc peut faire allusion.

  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 jro-daemon
    In file included from term.c:6:
    include/term.h:14: error: two or more data types in declaration specifiers
    Classique. Il manque probablement une ';' à la fin de la définition d'un type ou d'une structure juste avant cette erreur...

    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
     
    #ifndef _TERM_H_
    #define _TERM_H_
    /*Déclaration des typedefs, defines utilisées et structures ou unions*/
    typedef struct data data_t;
    struct data
    {
      int mode;
      char* id;
    }
    /*Prototypes de fonctions*/
    int
    main(int, char**);
    int
    f1(int,char*);
    int
    f2(data_t*,double);
    #endif
    Bingo !

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

Discussions similaires

  1. Erreur de compilation avec GCC
    Par Neuromancien2 dans le forum C
    Réponses: 7
    Dernier message: 20/08/2007, 09h54
  2. [Debutant GCC sur Solaris]Erreur de compilation
    Par xxaragornxx dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 13/01/2006, 17h29
  3. compilation avec gcc: erreur inhabituelle
    Par artatum dans le forum C
    Réponses: 4
    Dernier message: 12/10/2005, 17h13
  4. compilation avec gcc : erreurs bizard !!!
    Par CodeurNé dans le forum C
    Réponses: 2
    Dernier message: 23/09/2005, 18h09
  5. Réponses: 3
    Dernier message: 22/08/2005, 18h28

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