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 :

Compilation d'un programme utilisant getopt (unistd.h)


Sujet :

C

  1. #1
    Membre actif Avatar de SaintAmand
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 174
    Points : 203
    Points
    203
    Par défaut Compilation d'un programme utilisant getopt (unistd.h)
    Bonjour,

    Puisque c'est mon premier message, je précise que j'étudie l'informatique depuis l'été dernier et le C depuis 6 semaines. Enfin j'utilise un environnement GNU/Linux (Debian).

    Je viens de reprendre un petit programme en C qui utilise la fonction getopt (celle de unistd.h). Le problème est que je n'arrive plus à le compiler. gcc -Wall -pedantic -ansi -o lostrings lostrings.c me retourne

    lostrings.c: In function `main':
    lostrings.c:34: error: `opterr' undeclared (first use in this function)
    lostrings.c:34: error: (Each undeclared identifier is reported only once
    lostrings.c:34: error: for each function it appears in.)
    lostrings.c:36: warning: implicit declaration of function `getopt'
    lostrings.c:41: error: `optarg' undeclared (first use in this function)

    Même si la page de man n'en parle pas, il me semble que j'avais du ajouter -lbidule comme argument à gcc pour l'édition des liens, mais je ne trouve plus le nom de la bibliotheque.

    Sinon, j'ai tout de même réussi à le compiler en ajoutant extern int opterr; etc, ou en remplacant #include <unistd.h> par #include <getopt.h>.

    Merci d'avance pour vos éclaircissements,

    --
    SaintAmand

  2. #2
    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
    Envoie ton code, on pourra peut être t'aider.

    Si tu fais un man getopt, tu devrais trouver les en-tête qu'il faut inclure.

  3. #3
    Membre actif Avatar de SaintAmand
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 174
    Points : 203
    Points
    203
    Par défaut
    Voici donc le code.

    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
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
     
          1 /*************************************************************
          2  * Filename: lostrings.c
          3  * Author: Eric Guirbal
          4  * Date: 23/01/2006
          5  *
          6  * Ce programme génère de manière aléatoire une liste de mots
          7  *
          8  * lostrings [arguments]
          9  *   -s <1-65535> nombre de mots
         10  *   -m <1-255> longueur minimale d'un mot
         11  *   -M <1-255> longueur maximale d'un mot
         12  *
         13  */
         14
         15 #include <stdio.h>
         16 #include <stdlib.h>
         17 #include <unistd.h>
         18 #include <string.h>
         19 #include <math.h>
         20 #include <time.h>
         21
         22 int
         23 main (int argc, char *argv[])
         24 {
         25
         26   char *options_list = "hs:m:M:";
         27   int option;
         28   unsigned int nb_words = 100;  /* Taille de la liste */
         29   int min_length = 5;           /* Longueur minimale d'un mot */
         30   int max_length = 12;          /* Longueur maximale d'un mot */
         31   int i, j;
         32   int length;                   /* longueur du mot généré */
         33
         34   opterr = 0;                   /* pas de message d'erreur automatique */
         35
         36   while ((option = getopt (argc, argv, options_list)) != -1)
         37     {
         38       switch (option)
         39         {
         40         case 's':
         41           if (atol (optarg) < 1 || atol (optarg) > 65535)
         42             {
         43               fprintf (stderr,
         44                        "%s: le nombre mots doit être compris entre 1 et 65535\n",
         45                        argv[0]);
         46
         47               return EXIT_FAILURE;
         48             }
         49           fprintf (stdout, "nombre de mots: %s\n", optarg);
         50           nb_words = atoi (optarg);
         51           break;
         52         case 'm':
         53           if (atol (optarg) < 1 || atol (optarg) > 255)
         54             {
         55               fprintf (stderr,
         56                        "%s: la longueur minimale doit être comprise entre 1 et 255\n",
         57                        argv[0]);
         58               return EXIT_FAILURE;
         59             }
         60           fprintf (stdout, "longueur minimale d'un mot: %s\n", optarg);
         61           min_length = atoi (optarg);
         62           break;
         63         case 'M':
         64           if (atol (optarg) < 1 || atol (optarg) > 255)
         65             {
         66               fprintf (stderr,
         67                        "%s: la longueur maximale d'un mot doit être comprise entre 1 et 2        55\n",
         68                        argv[0]);
         69               return EXIT_FAILURE;
         70             }
         71           fprintf (stdout, "longueur maximale d'un mot: %s\n", optarg);
         72           max_length = atoi (optarg);
         73           break;
         74         case 'h':
         75           fprintf (stdout, "Usage: %s [options]\n", argv[0]);
         76           fprintf (stdout, "Options:\n");
         77           fprintf (stdout, "  -s <1-65535>     nombre de mots\n");
         78           fprintf (stdout, "  -m <1-255>       longueur minimale d'un mot\n");
         79           fprintf (stdout, "  -M <1-255>       longueur maximale d'un mot\n");
         80           fprintf (stdout, "  -h               affiche cette aide\n");
         81           return EXIT_SUCCESS;
         82         case '?':
         83           fprintf (stderr,
         84                    "%s : argument invalide\nlostrings -h pour plus d'information\n",
         85                    argv[0]);
         86           return EXIT_FAILURE;
         87         }
         88     }
         89   if (max_length < min_length)
         90     {
         91       fprintf (stderr,
         92                "%s: la longueur minimale doit être inférieure ou égale à la longueur maxi        male\n",
         93                argv[0]);
         94       return EXIT_FAILURE;
         95     }
         96
         97
         98   srand (time (NULL));
         99   for (i = 1; i <= nb_words; i++)
        100     {
        101       if (min_length != max_length)
        102         length =
        103           (int) ((double) rand () / ((double) RAND_MAX + 1) *
        104                  (max_length - min_length + 1)) + min_length;
        105       else
        106         length = min_length;
        107       for (j = 1; j <= length; j++)
        108         fprintf (stdout, "%c",
        109                  'a' +
        110                  (int) ((double) rand () / ((double) RAND_MAX + 1) *
        111                         ('z' - 'a' + 1)));
        112       fprintf (stdout, "\n");
        113     }
        114   return EXIT_SUCCESS;
        115 }
    ~
    eric@indiana:~/informatique/langageC$ gcc -Wall -pedantic -ansi -o lostrings lostrings.c
    lostrings.c: In function `main':
    lostrings.c:34: error: `opterr' undeclared (first use in this function)
    lostrings.c:34: error: (Each undeclared identifier is reported only once
    lostrings.c:34: error: for each function it appears in.)
    lostrings.c:36: warning: implicit declaration of function `getopt'
    lostrings.c:41: error: `optarg' undeclared (first use in this function)

    Merci.

    --
    SaintAmand

  4. #4
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Sans pouvoir compiler ton code (la prochaine fois, ne mets pas la numérotation des lignes), je pense que c'est lié à l'utilisation de getopt.

    Met ceci au début de ton code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
           #include <unistd.h>
     
           int getopt (int argc, char * const argv[],
                      const char *optstring);
     
           extern char *optarg;
           extern int optind, opterr, optopt;
     
           #include <getopt.h>
    EDITION: le #include<getopt.h> n'est pas nécessaire... En principe, la déclaration explicite du prototype non plus, mais vu ton warning...

    La page man en français: http://man.developpez.com/man3/getopt.3.php

    Et pour les discussion de portabilité:

    POSIX.2, à condition que la variable d'environ*
    nement POSIXLY_CORRECT soit positionnée. Sinon,
    les éléments de argv ne sont pas vraiment constants
    d'autres systèmes.
    Jc

  5. #5
    Membre éprouvé
    Avatar de Pouic
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 669
    Points : 977
    Points
    977
    Par défaut
    Attention, getopt.h n'est pas nécessaire.

    Le protoype de la fonction non plus.

    Il te suffit en effet juste de déclarer en extern les variables que tu comptes utiliser.

    Et autre remarque : suivant les systèmes (entre *BSD, Linux, etc...), les variables accessibles ne sont pas les même...

    Voilou
    Software becomes slower faster than hardware becomes faster
    [size=1]
    http://xrenault.developpez.com

  6. #6
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Attention, getopt.h n'est pas nécessaire.

    Le protoype de la fonction non plus.
    C'est ce que je pensais aussi mais vu le message d'erreur et qu'il incluait déjà unistd.h, je préférais le jouer "safe", en déclarant explicitement toutes les fonctions qu'il pourrait avoir besoin. La ligne "include getopt" est un copier coller qui est aller trop loin...

  7. #7
    Membre actif Avatar de SaintAmand
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 174
    Points : 203
    Points
    203
    Par défaut
    Merci beaucoup pour vos réponses rapides. Comme je l'ai écrit dans le message intial, j'ai résolu le problème en ajoutant les externs comme vous me le proposez. Cependant, j'ai découvert la fonction getopt en feuilletant la "Programmation système en C sous Linux" de Christophe Blaess. Dans l'exemple qu'il donne p.59, il se contente d'un #include <unistd.h> sans recourir aux externs. Je me suis inspiré de son exemple pour coder ce programme ainsi que quelques autres. Et tous compilaient. Cependant cela remonte à debut décembre et j'ai oublié comment je m'y suis pris. Dans un autre livre que je viens d'emprunter, "Programmation en langage C sous linux" de Warren Gay, il y a plusieurs exemples, et lui par contre, tantôt il met les externs, tant il s'en passe!.

    --
    SaintAmand

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par SaintAmand
    Dans un autre livre que je viens d'emprunter, "Programmation en langage C sous linux" de Warren Gay, il y a plusieurs exemples, et lui par contre, tantôt il met les externs, tant il s'en passe!.
    C'est vraiment n'importe quoi. Même si c'est techniquement possible, ce n'est pas à l'utilisateur me mettre les ''externs' explicitement (risque d'erreur, doublons...). Ca va à l'encontre des principes de bonne conception les plus élémentaires.

    Les headers sont fait pour ça et il faut donc les utiliser.

    Si ça ne fonctionne pas, il faut étudier la doc (Il manque peut être des macros globales), et éventuellement se plaindre auprès du fournisseur.
    Pas de Wi-Fi à la maison : CPL

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par fearyourself
    Met ceci au début de ton code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
           #include <unistd.h>
     
           int getopt (int argc, char * const argv[],
                      const char *optstring);
     
           extern char *optarg;
           extern int optind, opterr, optopt;
     
           #include <getopt.h>
    EDITION: le #include<getopt.h> n'est pas nécessaire... En principe, la déclaration explicite du prototype non plus, mais vu ton warning...
    Je dirais le contraire. L'inclusion de <getopt.h> est nécessaire, et il ne faut pas déclarer les prototypes 'à la main'.
    Pas de Wi-Fi à la maison : CPL

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Pouic
    Attention, getopt.h n'est pas nécessaire.

    Le protoype de la fonction non plus.

    Il te suffit en effet juste de déclarer en extern les variables que tu comptes utiliser.
    Horrible bricolage. Si on se trompe (type, taille de tableau), c'est l'horreur. Pourquoi ne pas utiliser le header ?
    Pas de Wi-Fi à la maison : CPL

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par fearyourself
    Sans pouvoir compiler ton code (la prochaine fois, ne mets pas la numérotation des lignes),
    Un coup d'UltraEdit en mode colonnes et couic. 10 secondes...
    Pas de Wi-Fi à la maison : CPL

  12. #12
    Membre actif Avatar de SaintAmand
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 174
    Points : 203
    Points
    203
    Par défaut
    Bonjour,

    Voilà, je viens enfin de comprendre pourquoi le programme refuse de compiler. Il se trouve que depuis trois semaines, j'ajoute l'option -ansi à gcc
    en plus de -Wall -pedantic.
    Mon problème est maintenant le suivant. Etant débutant, j'essaie autant que possible d'écrire du C portable, c'est pourquoi j'utilise l'option -ansi. Cela m'évite d'utiliser des extensions gnu sans le savoir, en outre cela me semble être la norme de référence, l'iso C99 n'étant pas complétement implémenté dans tous les compilateurs de références. Donc j'ai trois solutions:
    1) je règle le problème en ajoutant des externs à mon source. Mais comme l'a mentionné E. Delahaye, on ne devrait pas avoir à le faire.
    2) je remplace #include <unistd.h> par #include <getopt.h>. Mais alors selon le livre de C. Blaess, "Programmation système en C sous Linux", alors que getopt() est définie par Posix.2 (existe-t-elle sous windows?), le fichier d'en-tête <getopt.h> lui-même est une extension Gnu. Je suis donc étonné que cela compile avec -ansi.
    3) Je vire l'option -ansi, mais est-ce bien raisonnable?

    Pour ma part, je serais tenté par l'option 2.
    S'il vous semble que je me trompe, merci de me prévenir.

    --
    SaintAmand

  13. #13
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Citation Envoyé par SaintAmand
    3) Je vire l'option -ansi, mais est-ce bien raisonnable?
    C'est tout a fait raisonnable. -ansi revient a faire -std=c89. Rien a voir avec POSIX.2.
    getopt() demande d'include unistd.h, inutile de se compliquer la vie pour rien: tu inclues unitstd.h, et tu vires le -ansi.

  14. #14
    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
    Mon problème est maintenant le suivant. Etant débutant, j'essaie autant que possible d'écrire du C portable, c'est pourquoi j'utilise l'option -ansi. Cela m'évite d'utiliser des extensions gnu sans le savoir, en outre cela me semble être la norme de référence, l'iso C99 n'étant pas complétement implémenté dans tous les compilateurs de références.
    -ansi te permet de t'assurer que ton code est standard ISO C90. Il n'est donc pas forcément C99. Si tu veux le rendre C99, il te faut rajouter std=C99.

    l'iso C99 n'étant pas complétement implémenté dans tous les compilateurs de références.
    A ma connaissance, GCC l'est.

  15. #15
    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
    tu inclues unitstd.h, et tu vires le -ansi.
    Ce n'est jamais une bonne solution, c'est une solution de facilité quand on a pas les moyens de faire autrement mais là il doit y avoir une autre solution.

  16. #16
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Si le -ansi empeche d'obtenir les extensions GNU necessaire a l'utilisation de getopt(), c'est un probleme. Il faut donc le retirer (ne serait que pour l'unite de compilation concernee).

    Ceci dit, d'apres man 3 getopt, il semble que seules getopt_long() et getopt_long_only() (prototypes dans getopt.h) aient besoin du #define _GNU_SOURCE. Pour le getopt() classique, cela devrait marcher.

  17. #17
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par DaZumba
    Si le -ansi empeche d'obtenir les extensions GNU necessaire a l'utilisation de getopt(), c'est un probleme. Il faut donc le retirer (ne serait que pour l'unite de compilation concernee).
    Je ne suis pas persuadé (je peux me trompé), j'utilise l'option -ansi (entre autre) pour compiler mes programmes utilisant GTK+, du momment que les fichiers d'en tête et ton code respecte la norme il n'y a pas de problème.

  18. #18
    Membre actif Avatar de SaintAmand
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 174
    Points : 203
    Points
    203
    Par défaut
    Citation Envoyé par PRomu@ld
    l'iso C99 n'étant pas complétement implémenté dans tous les compilateurs de références.
    A ma connaissance, GCC l'est.
    C'est bien avancé mais pas terminé y compris dans le CVS.
    http://gcc.gnu.org/c99status.html

    --
    SaintAmand

  19. #19
    Membre actif Avatar de SaintAmand
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 174
    Points : 203
    Points
    203
    Par défaut
    Citation Envoyé par DaZumba
    Si le -ansi empeche d'obtenir les extensions GNU necessaire a l'utilisation de getopt(), c'est un probleme. Il faut donc le retirer (ne serait que pour l'unite de compilation concernee).

    Ceci dit, d'apres man 3 getopt, il semble que seules getopt_long() et getopt_long_only() (prototypes dans getopt.h) aient besoin du #define _GNU_SOURCE. Pour le getopt() classique, cela devrait marcher.
    Comme je l'ai écrit, effectivement getopt() marche sans _GNU_SOURCE. Cependant, d'après le livre de C. Blaess, le fichier getopt.h est une extension GNU, or j'aimerais autant que possible éviter leurs utilisations. Cependant, je vais tout de même faire une exception tant qu'il s'agit de petits programmes destinés à mon apprentissage. Et si je suis amené à écrire quelque chose de plus important que je désire portable, j'écrirais mes propres fonctions; c'est ce qu'on fait les développeurs de MPlayer et Lame par exemple.

    --
    SaintAmand

  20. #20
    Membre actif Avatar de SaintAmand
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 174
    Points : 203
    Points
    203
    Par défaut
    Citation Envoyé par gege2061
    Je ne suis pas persuadé (je peux me trompé), j'utilise l'option -ansi (entre autre) pour compiler mes programmes utilisant GTK+, du momment que les fichiers d'en tête et ton code respecte la norme il n'y a pas de problème.
    Grâce à ta remarque, je viens de me rendre compte qu'inconsciemment j'avais plus ou moins à l'esprit "-ansi ~ portable".
    Merci.

    --
    SaintAmand

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/05/2015, 14h43
  2. Réponses: 2
    Dernier message: 15/10/2008, 10h18
  3. compilation d'un programme utilisant libxslt
    Par modafine dans le forum Bibliothèques
    Réponses: 2
    Dernier message: 09/05/2008, 08h55
  4. [windows] compiler un programme utilisant wxWidgets
    Par and1hotsauce dans le forum wxWidgets
    Réponses: 7
    Dernier message: 24/01/2007, 19h01

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