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 de compilation et questions diverses


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Août 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Août 2007
    Messages : 91
    Par défaut erreur de compilation et questions diverses
    bonjour,
    j'ai un petit problème de compilation sur cette ligne de mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char * sms =  creation_sms(emetteur) ;
    le compilateur me renvoie un void value not ignored as it ought to be et je comprend pas car la fonction creation_sms est de prototype
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char * creation_sms(char * emetteur )
    si quelqu'un pouvait m'expliquer d'ou vient le problème

    ensuite j'aurais d'autre question du genre plus général

    Quand je compile une application avec cygwin cela la rend elle executable sous linux ?

    Pourquoi si je veux compiler avec dev-cpp des applications à la norme posix il me sort de erreurs de linker notamment un winMain@16
    et un incompréhensible ld return 1 exit status ?

    Pourquoi j'ai les mêmes erreurs en compilant avec cygwin ... :s ?

    Merci d'avance de vos réponses

  2. #2
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    863
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 863
    Par défaut
    Ca c'est un prototype:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char * creation_sms(char * emetteur )
    On indique au compilateur les types à respecter

    Ca c'est du code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #define C_NB_MAX_CHAR_SMS  1024
    static char sms[C_NB_MAX_CHAR_SMS];
    static char emetteur[C_NB_MAX_CHAR_SMS];
    sms =  creation_sms(emetteur) ;

    Remarque au sujet de cet EXEMPLE de code:Il s'agit d'une allocation statique de mémoire (la mémoire est allouée une seule fois et dans ce cas les buffers ont été alloués arbitrairement à 1024: bie vérifier si cela corresponds à votre besoin.

    Quand je compile une application avec cygwin cela la rend elle executable sous linux ?
    Non

    Pourquoi si je veux compiler avec dev-cpp des applications à la norme posix il me sort de erreurs de linker notamment un winMain@16
    et un incompréhensible ld return 1 exit status ?

    Pourquoi j'ai les mêmes erreurs en compilant avec cygwin ... :s ?
    Postez le code...

    Pourquoi utilisez vous dev-cpp (périmé à a connaissance), alors que codeblocs est génial ?
    http://www.codeblocs.org

  3. #3
    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 Jonkile Voir le message
    j'ai un petit problème de compilation sur cette ligne de mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char * sms =  creation_sms(emetteur) ;
    le compilateur me renvoie un void value not ignored as it ought to be et je comprend pas car la fonction creation_sms est de prototype
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char * creation_sms(char * emetteur )
    si quelqu'un pouvait m'expliquer d'ou vient le problème
    Sans voir tout le code compilable(sauf ce bug) qui provoque ce problème, impossible d'en dire plus. On peut supposer que le compilateur voit un prototype séparé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void creation_sms(char * emetteur );
    mais ce n'est qu'une devinette sans valeur réelle.
    ensuite j'aurais d'autre question du genre plus général

    Quand je compile une application avec cygwin cela la rend elle executable sous linux ?
    Pas à ma connaissance.
    Pourquoi si je veux compiler avec dev-cpp des applications à la norme posix il me sort de erreurs de linker notamment un winMain@16
    et un incompréhensible ld return 1 exit status ?
    Il doit manquer un main() dans ton application.
    Pourquoi j'ai les mêmes erreurs en compilant avec cygwin ... :s ?
    Pour la même raison.

    Tant qu'on ne voit pas ton code, on ne peut pas répondre sérieusement.

  4. #4
    Membre confirmé
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Août 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Août 2007
    Messages : 91
    Par défaut
    ok bah voila mon code pour l'instant c'est en vrac


    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
    #include <unistd.h>
    #include <stdio.h>
    #include <string.h>
    #include <pthread.h>
    #include <sys/types.h>
    #include <stdlib.h>
    #include "../chaine/alea.h"
    #include "../chaine/chaine.h"
    #include "../chaine/message.h"
    #include "../creation_sms.h"
     
    #define L 0 
    #define E 1
    //definition de deux descripteurs de fichiers qui vont servir aux pipes
     
    int pipe2central[2] ;
    int central2pipe[2] ;
     
    /* fonction d'envoi du sms au central via un pipe */
    void ecriture_sms(int argc , char * argv[])
    {    
     
    char * emetteur = "0601020304"  ;
    char * sms =  creation_sms(emetteur) ;
     
    pipe(pipe2central) ;
    close(pipe2central[L]);
    write(pipe2central[E], &sms, (size_t) sizeof(sms)) ; 
    close(pipe2central[E]);
     
     
    }
    et mon deuxième fichier
    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
    #include <unistd.h>
    #include <stdio.h>
    #include <string.h>
    #include "chaine/alea.h"
    #include "chaine/chaine.h"
    #include "chaine/message.h"
     
     
    /* fonction de lecture d'un numéro de tel au hasard dans un fichier inspiré d'une fonction créée par M Miroux */
    char * creation_sms(char * emeteur )
    {
     
    /* Récuperation d'un numéro de téléphone au hasard */
    	//on crée un nombre aléatoire compris entre 0 et 20
     
    	int aleatoire = alea(0,20) ;
    	printf("Nombre aleatoire : %d\n", aleatoire);
     
    /* On ouvre le fichier texte et on récupère un numéro de téléphone */
     
    	// ouverture du fichier ou se trouve les numéros de téléphone, en lecture seulement
    	FILE * fd ;
    	fd = fopen ("numtel.txt", "r");
    	if (fd == NULL) printf("Erreur d'ouverture du fichier ou fichier non existant \n");//erreur d'ouverture
        char * destinataire ;
    	int i = 0 ;
    	while (i < aleatoire)
    	{
     
    		// lecture du aléatoirième numéro de tel du fichier 
    		fgets(destinataire , 10, fd) ;
    		i ++ ;
        }
         if (destinataire = NULL) printf(" une erreur de lecture est survenue \n") ;
     
    /* création du SMS à envoyer */		
    		//on crée un message de taille aléatoire
    		int lgr_message = alea(0,255) ; 
    		char * message1 = (char *) chaine(lgr_message) ; 
     
    //affichage du message et du numéro de tél du destinataire
    printf( " numéro du destinataire : %s \n", destinataire) ;
    printf( " message : %s \n ", message1 ) ;
     
    /* formatage du message pour envoi vers le serveur central */
    char *  identifiant = (char*)alea(0 , 5000) ; 
    char * sms = (char * ) message(emeteur , destinataire, "SMS", identifiant, message1) ;	
     
    // affichage du SMS
    printf(" %s \n", sms) ;	
    return sms ; 
     
    }
    bon bah si vous pouvez m'aidez je prend merci beaucoup mes erreur de compilations sont les suivantes pour le deuxième fichier

    [Linker error] undefined reference to `alea'
    [Linker error] undefined reference to `chaine'
    [Linker error] undefined reference to `message'
    [Linker error] undefined reference to `WinMain@16'
    ld returned 1 exit status


    j'utilise plus dev-cpp j'utilise cygwin je code avec nedit et je compile a la main je ferais mes makefile plus tard

  5. #5
    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 Jonkile Voir le message
    ok bah voila mon code pour l'instant c'est en vrac
    <...>
    Il manque les .h, on ne peut rien compiler...

    C'est si compliqué que ça de poster tout le code ? Ou alors donne une url...
    j'utilise plus dev-cpp j'utilise cygwin je code avec nedit et je compile a la main je ferais mes makefile plus tard
    Mauvais plan. On ne sais pas comment tu compiles. Fait le makefile tout de suite.

    En tout cas, dans ce que tu as posté, il n'y a pas de fonction main(), comme je l'avais supposé. Ce n'est pas une application C valide.

  6. #6
    Membre confirmé
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Août 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Août 2007
    Messages : 91
    Par défaut
    Ah ok désolé je n'avais pas compris que vous vouliez tout le code je ne voulais pas surcharger le post

    alors creation_sms.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void creation_sms(char * emeteur );
    alea.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
    #ifndef _ALEAH_
    #define _ALEAH_
     
    /**
     * Initialisation du générateur aléatoire
     */
    void aleainit();
     
    /**
     * Retourne un nombre aléatoire en min et max (bornes comprises)
     */
    int alea(int min, int max);
     
    #endif // _ALEAH_
    message.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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    #ifndef _MESSAGEH_
    #define _MESSAGEH_
     
    /**
     * Decoupe du message 
     * Retourne 1 si il n'y a pas eu de problème
     * Retourne 0 si il y a eu un problème
     * ATTENTION:
     *   Les variables emeteur, destinataire, commande, identifiant
     *   et sms doivent être allouées avant l'appel à decoupe
     */
    int decoupe(char *message,      /* Source a découper */
    	    char *emeteur,      /* Emeteur du message */
    	    char *destinataire, /* Recepteur du message */
    	    char *commande,     /* Commande du message */
    	    char * identifiant, /* Identifiant unique sur le telephone */
    	    char *sms           /* Le sms lui-même */
    	    );
     
    /** 
     * Construction du message
     * Retourne le message construit suivant le protocole
     * a partir des arguments
     * Le message est alloué dans la fonction
     */
    char* message(char *emeteur, char *destinataire, char *commande, 
    	      char * identifiant, char *sms);
     
    #endif // _MESSAGEH_
    chaine.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
    #ifndef _CHAINEH_
    #define _CHAINEH_
     
    /** 
     * Retourne une chaine aléatoire de longueur lgr
     * Note: la taille de la mémoire réservée est de lgr+1
     */
    char *chaine(int lgr);
     
    /** 
     * Retourne un nombre, i.e. une chaine de chiffres aléatoires de longueur lgr
     * Note: la taille de la mémoire réservée est de lgr+1
     */
    char *nombre(int lgr);
     
    #endif // _CHAINEH_
    on remarque la différence entre celui que 'ai fait moi même et ceux que j'ai reçu par mon prof ... :s

  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 Jonkile Voir le message
    alors creation_sms.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void creation_sms(char * emeteur );
    Et voilà. L'explication a été donnée ici :
    http://www.developpez.net/forums/sho...06&postcount=3

    Ce prototype n'est pas celui de la fonction.

    Cette erreur ne peut pas se produire si on respecte une règle de bon sens qui veut que quand on définit un fichier x.c contenant des fonction xa() etc, on inclue systématiquement le header x.h cnontenant le prptotype séparé des fonctions xa() etc. en première ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    /* x.h */
    void xa(void);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    /* x.c */
    #include "x.h"
     
    void xa(void)
    {
       ...
    }
    en effet, en cas d'incohérence, ça ne compile pas, tout simplement...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #ifndef _CHAINEH_
    #define _CHAINEH_
    Ton prof ne connait pas le C. Les identificateurs commençant par _ sont réservés à l'implémentation et non au développement d'applications.

    Ceci est correct :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #ifndef H_CHAINE
    #define H_CHAINE

Discussions similaires

  1. Erreur de compilation après modification du Uses
    Par DevelOpeR13 dans le forum Langage
    Réponses: 5
    Dernier message: 30/10/2007, 14h23
  2. question sur les erreurs de compilation
    Par vince3320 dans le forum C
    Réponses: 5
    Dernier message: 19/04/2004, 11h34
  3. Réponses: 10
    Dernier message: 22/09/2003, 21h58
  4. Réponses: 4
    Dernier message: 27/08/2003, 21h34
  5. Réponses: 2
    Dernier message: 04/03/2003, 23h24

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