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 :

fonction putenv de stdlib


Sujet :

C

  1. #1
    Membre actif
    Profil pro
    ingénieur
    Inscrit en
    Novembre 2011
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur

    Informations forums :
    Inscription : Novembre 2011
    Messages : 165
    Points : 259
    Points
    259
    Par défaut fonction putenv de stdlib
    Bonjour à tous,

    Je compile du code avec cc (cc: Sun C 5.10 Linux_i386 2009/06/03)
    J'ai un warning qui me dit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "./SRC/BMOTEUR_calcul.c", line 79: warning: implicit function declaration: putenv
    pourtant j'ai bien en début de fichier:

    Du coup je ne comprends pas pourquoi j'ai ce warning.... des idées?

    nb: l'appel de la fonction est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      char str[1000] = " ";
    ...
    ...
    ...
        putenv(str);

  2. #2
    Expert éminent sénior

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    faut savoir lire une doc...

    putenv

    int putenv (char *string);
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  3. #3
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2012
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 190
    Points : 380
    Points
    380
    Par défaut @souviron34
    salut !

    on est au moins deux à ne pas savoir lire les doc.
    je ne suis pas un compilateur, mais je ne vois pas où est le pb.
    j'ai hâte d'apprendre.

    A+
    Don't want money. Got money. Want admiration.
    (A tribute to SSG)

  4. #4
    Expert éminent sénior

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    devrait marcher..

    Le prototype est un int et l'appel le transforme en void..

    Je pense donc que le compilo trouve que c'est une nouvelle définition, qui, au link n'est pas trouvée..

    PS: par contre, il faudrait savoir avec quels flags c'est compilé. Et d'autre part quelles versions. Parce qu'il me semble me souvenir que sous certains "flavours" de unix c'était dans "unistd.h"..
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  5. #5
    Membre actif
    Profil pro
    ingénieur
    Inscrit en
    Novembre 2011
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur

    Informations forums :
    Inscription : Novembre 2011
    Messages : 165
    Points : 259
    Points
    259
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CFLAGS=-D_ANSI_C_SOURCE\       
           -D_POSIX_C_SOURCE\                                                                  
           -Dlinux\                                                    
           -DXT_CODE\                                                                  
           -DMOTIF\                                                                
           -DXOPEN_CATALOG\                                                                    
           -D_XOPEN_SOURCE_EXTENDED
    voici les flags significatifs. La question que je me pose est sur le -Dlinux: l'appli que j'essaye de compiler a été développée sous Unix, et le flag était: -Dsun4, que j'ai remplacé sans trop être sûr de mon fait (la doc est un peu confuse sur ce point) par -Dlinux.

    pour info cat /proc/version renvoie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Linux version 2.6.18-164.el5 (mockbuild@x86-003.build.bos.redhat.com) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-46)) #1 SMP Tue Aug 18 15:51:48 EDT 2009
    4

  6. #6
    Membre actif
    Profil pro
    ingénieur
    Inscrit en
    Novembre 2011
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur

    Informations forums :
    Inscription : Novembre 2011
    Messages : 165
    Points : 259
    Points
    259
    Par défaut
    arf, merci souviron34 d'avoir soulevé le problème des flags, j'ai résolu le problème en changeant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    -D_XOPEN_SOURCE_EXTENDED
    par

    Par contre si quelqu'un peux m'expliquer le pourquoi du comment...

  7. #7
    Expert éminent sénior

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    bah faudrait d'une part voir la définition de _EXTENDED par rapport au normal, et d'autre part aller voir dans stdlib.h l'ordre des tests autour de la définiition de getenv/putenv..
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  8. #8
    Expert éminent sénior
    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
    Points : 13 926
    Points
    13 926
    Par défaut
    @souviron34
    Le prototype est un int et l'appel le transforme en void..

    Je pense donc que le compilo trouve que c'est une nouvelle définition, qui, au link n'est pas trouvée..
    Non, ignorer la valeur de retour lors d'un appel n'affecte pas le prototype d'une fonction (l'exemple le plus fréquemment rencontré est sans doute l'utilisation courante de printf()).
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  9. #9
    Expert éminent sénior

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    exact mea culpa (d'ailleurs j'avais vérifié dans mon code et je faisais pareil ...)

    Il doit y avoir un truc avec le _EXTENDED qui soit l'envoie dans un autre .h, soit lui donne une autre défintiion..
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  10. #10
    Membre actif
    Profil pro
    ingénieur
    Inscrit en
    Novembre 2011
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur

    Informations forums :
    Inscription : Novembre 2011
    Messages : 165
    Points : 259
    Points
    259
    Par défaut
    par contre ce qui me parait étrange c'est que lorsqu'on va voir dans stdlib.h pour voir la définition de putenv, on trouve:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #if defined __USE_SVID || defined _USE_XOPEN  
    /* The SVID says this is in <stdio.h>, but this seems a better place.   */  
    /* Put STRING, which is of the form "NAME=VALUE", in the environment.
    If there is no `=', remove NAME from the environment.  */ 
    extern int putenv (char *__string) __THROW __nonnull ((1));    
    #endif
    ça me parait bizarre: au lieu de

    ne serait-il pas plutôt correct de mettre

    ??

  11. #11
    Expert éminent sénior

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    il doit y avoit quelque part un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #ifdef _XOPEN_SOURCE
    #define _USE_XOPEN
    #endif
    Sinon, comme il est dit :

    The SVID says this is in <stdio.h>,
    Donc faut faire "man" quand on change de système

    Note: encore une fois, norme et implémentation....
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  12. #12
    Membre actif
    Profil pro
    ingénieur
    Inscrit en
    Novembre 2011
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur

    Informations forums :
    Inscription : Novembre 2011
    Messages : 165
    Points : 259
    Points
    259
    Par défaut
    merci pour tes posts éclairants...

    problème résolu

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 12/02/2013, 01h08
  2. la fonction system de stdlib
    Par fk04 dans le forum Threads & Processus
    Réponses: 2
    Dernier message: 16/03/2010, 20h57
  3. Implémentation des fonctions mathématiques
    Par mat.M dans le forum Mathématiques
    Réponses: 9
    Dernier message: 17/06/2002, 16h19
  4. fonction printf
    Par ydeleage dans le forum C
    Réponses: 7
    Dernier message: 30/05/2002, 11h24
  5. FOnction api specifiant la position de la souris
    Par florent dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/05/2002, 20h07

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