Provided by: manpages-fr_4.15.0-9_all bug

NOM

       feature_test_macros – Macros de test de fonctionnalités

DESCRIPTION

       Les  macros  de  test  de  fonctionnalités  permettent au programmeur de contrôler quelles
       définitions sont exposées par les fichiers  d'en‐têtes  système  lorsqu'un  programme  est
       compilé.

       NOTE :  pour  avoir un effet, une macro de test de fonctionnalités doit être définie avant
       d'inclure tout fichier d'en‐tête. Cela peut être accompli soit dans la ligne  de  commande
       de compilation (cc -DMACRO=valeur), soit en définissant la macro dans le code source avant
       d'inclure tout en‐tête. L’exigence que la macro soit  définie  avant  d’inclure  n’importe
       quel fichier d’en-tête existe parce que les fichiers d’en-tête peuvent librement s’inclure
       mutuellement. Donc, par exemple, dans les lignes suivantes, définir la  macro  _GNU_SOURCE
       peut  n’avoir  aucun  effet  parce que l’en-tête <abc.h> lui-même inclut <xyz.h> (POSIX le
       permet explicitement) :

           #include <abc.h>
           #define _GNU_SOURCE
           #include <xyz.h>

       Certaines macros de test de  fonctionnalités  sont  utiles  pour  créer  des  applications
       portables,  en  empêchant des définitions non normalisées d'être exposées. D'autres macros
       peuvent être utilisées pour exposer des  définitions  non  normalisées  qui  ne  sont  pas
       exposées par défaut.

       Les  effets  précis  de  chacune  des  macros décrites ci‐dessous peuvent être vérifiés en
       inspectant le fichier d'en‐tête <features.h>. Remarque : les applications n’ont pas besoin
       d’inclure directement <features.h>. En fait, le faire est fortement déconseillé. Consultez
       les NOTES.

   Spécification des exigences de macro de test de fonctionnalités dans les pages de manuel
       Quand une fonction nécessite qu'une macro de test  de  fonctionnalités  soit  définie,  la
       section  SYNOPSIS de la page de manuel comprend généralement une note de la forme suivante
       (exemple pris dans la page de manuel acct(2)) :

              #include <unistd.h>

              int acct(const char *fichier);

          Exigences de macros de test de fonctionnalités pour
          la glibc (consultez feature_test_macros(7)) :

              acct() : _BSD_SOURCE || (_XOPEN_SOURCE && _XOPEN_SOURCE < 500)

       Les doubles barres || signifient  que  pour  obtenir  la  déclaration  de  acct(2)  depuis
       <unistd.h>,  une des définitions de macros doit être utilisée avant d'inclure les fichiers
       d'en-tête :

           #define _BSD_SOURCE
           #define _XOPEN_SOURCE        /* Ou toute valeur < 500 */

       Autrement,  des  définitions  équivalentes  peuvent  être  faites  lors  de   l'appel   au
       compilateur :

           cc -D_BSD_SOURCE
           cc -D_XOPEN_SOURCE           # Ou toute valeur < 500

       Veuillez  noter  que, comme décrit ci-dessous, certaines macros de test de fonctionnalités
       sont définies  par  défaut,  et  il  n'est  donc  pas  toujours  nécessaire  de  spécifier
       explicitement les macros indiquées dans le SYNOPSIS.

       Dans certains cas, les pages de manuel utilisent des raccourcis pour exprimer la nécessité
       de certaines macros de test (exemple tiré de readahead(2)) :

           #define _GNU_SOURCE
           #include <fcntl.h>

           ssize_t readahead(int fd, off64_t *offset, size_t count);

       Ce format est utilisé dans les cas où seule une macro de test de fonctionnalités peut être
       utilisée pour exposer la déclaration de la fonction et quand cette macro n'est pas définie
       par défaut.

   Macros de test de fonctionnalités comprises par la glibc
       Les paragraphes suivants expliquent comment les macros de  test  de  fonctionnalités  sont
       gérées dans les glibc 2.x, x > 0.

       Tout d’abord, un aperçu de quelques détails pour l’impatient :

       –  Les  macros  les plus susceptibles d’être utilisées dans des codes source modernes sont
          _POSIX_C_SOURCE (pour des définitions de diverses versions de  POSIX.1),  _XOPEN_SOURCE
          (pour  des définitions de diverses versions de SUS), _GNU_SOURCE (pour certaines choses
          spécifiques à GNU ou Linux)  et  _DEFAULT_SOURCE  (pour  obtenir  des  définitions  qui
          normalement devrait être fournies par défaut).

       –  Certaines macros sont définies avec des valeurs par défaut. Par conséquent, même si une
          ou plusieurs macros sont indiquées comme nécessaires dans le  SYNOPSIS  d’une  page  de
          manuel,  il  peut ne pas être nécessaire de les définir explicitement. Tous les détails
          sur les valeurs par défaut sont donnés ci-après dans cette page de manuel.

       –  Définir _XOPEN_SOURCE avec une valeur de 600 ou plus produit le même effet que  définir
          _POSIX_C_SOURCE avec une valeur de 200112L ou supérieure. Lorsqu’apparaît

              _POSIX_C_SOURCE >= 200112L

          dans  les  nécessités des macros de test de fonctionnalités dans le SYNOPSIS d’une page
          de manuel, il est implicite que ce qui suit a le même effet :

              _XOPEN_SOURCE >= 600

       –  Définir _XOPEN_SOURCE avec une valeur de 700 ou plus produit le même effet que  définir
          _POSIX_C_SOURCE avec une valeur de 200809L ou supérieure. Lorsqu’apparaît

              _POSIX_C_SOURCE >= 200809L

          dans  les  nécessités des macros de test de fonctionnalités dans le SYNOPSIS d’une page
          de manuel, il est implicite que ce qui suit a le même effet :

              _XOPEN_SOURCE >= 700

       La glibc comprend les macros de test de fonctionnalités suivantes :

       __STRICT_ANSI__
              Norme C ISO. Cette macro est définie implicitement par gcc(1) lors des appels avec,
              par exemple, l'indicateur -std=c99 ou -ansi.

       _POSIX_C_SOURCE
              Si cette macro est définie, les en-têtes exposent les définitions suivantes :

              •  La valeur 1 expose les définitions conformes à POSIX.1-1990 et C ISO (1990).

              •  Les  valeurs  supérieures  ou  égales  à  2  exposent en plus les définitions de
                 POSIX.2-1992.

              •  Les valeurs supérieures ou égales à 199309L exposent en plus les définitions  de
                 POSIX.1b (extensions temps-réel).

              •  Les  valeurs supérieures ou égales à 199506L exposent en plus les définitions de
                 POSIX.1c (threads).

              •  (Depuis la glibc 2.3.3) Les valeurs supérieures ou égales à 200112L exposent  de
                 plus  les  définitions  correspondantes  à la spécification de base POSIX.1-2001
                 (sans l'extension XSI) et activent également les fonctionnalités C95 (depuis  la
                 glibc 2.12)  et  C99  (depuis la glibc 2.10) — en d’autres mots, l’équivalent de
                 définir _ISOC99_SOURCE.

              •  (Depuis la glibc 2.10) Les valeurs supérieures ou égales à 200809L  exposent  de
                 plus  les  définitions  correspondantes  à la spécification de base POSIX.1-2008
                 (sans l'extension XSI).

       _POSIX_SOURCE
              Définir cette macro obsolète (quelle que soit sa valeur) est équivalent  à  définir
              _POSIX_C_SOURCE à la valeur 1.

              Puisque cette macro est obsolète, son utilisation n’est généralement pas documentée
              lors de l’explication des nécessités de macros de test de fonctionnalités dans  les
              pages de manuel.

       _XOPEN_SOURCE
              Si cette macro est définie, les en-têtes exposent les définitions suivantes :

              •  Si  elle  est  définie,  quelle  que soit sa valeur, les définitions de POSIX.1,
                 POSIX.2 et XPG4 sont exposées.

              •  Les valeurs supérieures ou égales  à  500  exposent  les  définitions  de  SUSv2
                 (UNIX 98).

              •  (Depuis  la  glibc 2.2)  Les  valeurs  supérieures  ou égales à 600 exposent les
                 définitions  de  SUSv3  (UNIX 03,  c'est-à-dire   la   spécification   de   base
                 POSIX.1-2001 plus l'extension XSI) et de C99.

              •  (Depuis  la  glibc 2.10)  Les  valeurs  supérieures ou égales à 700 exposent les
                 définitions de SUSv4 (c'est-à-dire la spécification de  base  POSIX.1-2008  plus
                 l'extension XSI).

              Si  __STRICT_ANSI__  n'est  pas  définie,  ou si _XOPEN_SOURCE est définie avec une
              valeur supérieure ou égale à 500 et que ni _POSIX_SOURCE ni _POSIX_C_SOURCE ne sont
              explicitement définies, alors les macros suivantes sont implicitement définies :

              •  _POSIX_SOURCE est définie à la valeur 1.

              •  _POSIX_SOURCE est définie d'après la valeur de _XOPEN_SOURCE :

                 _XOPEN_SOURCE < 500
                        _POSIX_C_SOURCE est définie à la valeur 2.

                 500 <= _XOPEN_SOURCE < 600
                        _POSIX_C_SOURCE est définie à la valeur 199506L.

                 600 <= _XOPEN_SOURCE < 700
                        _POSIX_C_SOURCE est définie à la valeur 200112L.

                 700 <= _XOPEN_SOURCE (depuis la glibc 2.10)
                        _POSIX_C_SOURCE est définie à la valeur 200809L.

              De plus, définir _XOPEN_SOURCE avec une valeur de 500 ou supérieure produit le même
              effet que définir _XOPEN_SOURCE_EXTENDED.

       _XOPEN_SOURCE_EXTENDED
              Si  cette  macro  et  _XOPEN_SOURCE  sont   définies,   exposer   les   définitions
              correspondant aux extensions XPG4v2 (SUSv1) d'UNIX (UNIX 95). Définir _XOPEN_SOURCE
              avec une valeur de 500 ou supérieure  produit  aussi  le  même  effet  que  définir
              _XOPEN_SOURCE_EXTENDED.  L’utilisation  de  _XOPEN_SOURCE_EXTENDED  dans un nouveau
              code source est à éviter.

              Puisque définir _XOPEN_SOURCE avec une valeur de 500 ou supérieure produit aussi le
              même  effet  que définir _XOPEN_SOURCE_EXTENDED, cette dernière (obsolète) macro de
              test de fonctionnalités n’est généralement pas décrite dans le SYNOPSIS  des  pages
              de manuel.

       _ISOC99_SOURCE (depuis la glibc 2.1.3)
              Exposer des déclarations cohérentes avec la norme ISO C99.

              Les  versions  antérieures  de la glibc 2.1.x reconnaissaient une macro équivalente
              appelée _ISOC9X_SOURCE (parce que la norme C99  n'était  pas  finalisée).  Même  si
              l'utilisation  de  cette  dernière  macro  est  à proscrire, la glibc continue à la
              reconnaître pour des raisons de compatibilité ascendante.

              Si _ISOC99_SOURCE est définie, les  définitions  du  premier  amendement  au  C ISO
              (1990)  (aussi  appelé  C95)  sont  aussi exposées. La première modification de C95
              était la prise en charge des jeux de caractères internationaux.

              Invoquer le compilateur C avec l’option -std=c99 produit le même effet que  définir
              cette macro.

       _ISOC11_SOURCE (depuis la glibc 2.16)
              Exposer  des  déclarations cohérentes avec la norme ISO C11. La définition de cette
              macro active également les fonctionnalités C99 et C95 (comme _ISOC99_SOURCE).

              Invoquer le compilateur C avec l’option -std=c11 produit le même effet que  définir
              cette macro.

       _LARGEFILE64_SOURCE
              Exposer  les  définitions  pour  l'API alternative définie par le LFS (« Large File
              Summit ») comme une extension de transition pour la « Single UNIX  Specification ».
              Veuillez vous référer à ⟨http://opengroup.org/platform/lfs.html⟩. L'API alternative
              consiste en un jeu de nouveaux objets (c'est-à-dire des fonctions et types) dont le
              nom  est  suffixé  avec  « 64 »  (par  exemple  off64_t  pour off_t, lseek64() pour
              lseek(), etc.). Les nouveaux programmes ne devraient pas utiliser cette  macro ;  à
              la place, _FILE_OFFSET_BITS=64 devrait être utilisée.

       _LARGEFILE_SOURCE
              Cette  macro  a  historiquement  été  utilisée pour exposer certaines fonctions (en
              particulier fseeko() et ftello())  qui  contournent  les  limites  d’interfaces  de
              programmation précédentes (feek() et ftell()) qui utilisent long pour les positions
              de fichier. Cette macro est implicitement définie si _XOPEN_SOURCE est définie avec
              une  valeur  supérieure  ou  égale  à 500. Les nouveaux programmes ne devraient pas
              utiliser cette macro. Définir _XOPEN_SOURCE  comme  cela  vient  d’être  décrit  ou
              définir  _FILE_OFFSET_BITS à la valeur 64 sont les mécanismes préférés pour obtenir
              le même résultat.

       _FILE_OFFSET_BITS
              Définir cette macro à la valeur 64 convertit  automatiquement  les  références  aux
              fonctions  et  types  de  données  32 bits  liés  aux  E/S  sur les fichiers et aux
              opérations sur le système de fichiers en références à  leurs  équivalents  64 bits.
              C'est  utile  pour  les E/S sur des gros fichiers (> 2 gigaoctets) sur les systèmes
              32 bits. Cette macro permet aux programmes correctement écrits d'utiliser  de  gros
              fichiers avec seulement une recompilation.

              Les  systèmes  64 bits  permettent  d'office  d'utiliser  des  fichiers  de  taille
              supérieure à 2 gigaoctets, et sur ces systèmes cette macro n'a aucun effet.

       _BSD_SOURCE (obsolète depuis la glibc 2.20)
              Si cette macro est définie avec n’importe quelle valeur, les  définitions  héritées
              de BSD sont exposées par les en-têtes.

              Jusqu’à  la  glibc 2.18  incluse,  les  définitions  BSD  sont  préférées  dans les
              situations où les normes  sont  en  conflit,  sauf  si  au  moins  une  des  macros
              _SVID_SOURCE, _POSIX_SOURCE, _POSIX_C_SOURCE, _XOPEN_SOURCE, _XOPEN_SOURCE_EXTENDED
              ou _GNU_SOURCE est définie, auquel  cas  les  définitions  BSD  sont  défavorisées.
              Depuis  la  glibc 2.19, _BSD_SOURCE ne force plus la préférence des définitions BSD
              en cas de conflit.

              Depuis la glibc 2.20, cette macro est obsolète. Sa définition a le même  effet  que
              la  définition  de  _DEFAULT_SOURCE, mais génère un avertissement de compilation (à
              moins que _DEFAULT_SOURCE soit également définie). Utilisez  _DEFAULT_SOURCE  à  la
              place.  Pour  permettre au code nécessitant _BSD_SOURCE dans glibc 2.19 et versions
              antérieures, et _DEFAULT_SOURCE dans glibc 2.20 et version suivantes,  de  compiler
              sans avertissement, définissez à la fois _BSD_SOURCE et _DEFAULT_SOURCE.

       _SVID_SOURCE (obsolète depuis la glibc 2.20)
              Si  cette  macro est définie (quelle que soit sa valeur), les en‐têtes exposent les
              définitions  héritées  de  System V.  (SVID  ==  System V  Interface   Definition ;
              consultez standards(7).)

              Depuis la glibc 2.20, cette macro est obsolète de la même manière que _BSD_SOURCE.

       _DEFAULT_SOURCE (depuis la glibc 2.19)
              Cette  macro  peut  être  définie pour s’assurer que les définitions par « défaut »
              sont fournies même si les valeurs par défaut avaient été  désactivées,  comme  cela
              arrive  quand  les  macros  individuelles  sont  définies explicitement ou quand le
              compilateur  est  appelé  dans  un  de  ses  modes  « normalisés »   (par   exemple
              cc -std=c99).  Définir _DEFAULT_SOURCE n'a aucun effet sans définir d'autres macros
              individuelles ou invoquer le compilateur dans un de ses modes « normalisés ».

              Les définitions par « défaut » incluent celles requises par POSIX.1-2008 et C99 ISO
              ainsi  que plusieurs définitions dérivées de BSD et System V. Avec la glibc 2.19 et
              avant, ces définitions par défaut sont à peu  près  équivalentes  à  la  définition
              explicite suivante :

                  cc -D_BSD_SOURCE -D_SVID_SOURCE -D_POSIX_C_SOURCE=200809

       _ATFILE_SOURCE (depuis la glibc 2.4)
              Si  cette  macro est définie (quelle que soit sa valeur), les en-têtes exposent les
              définitions d'une série de fonctions avec le suffixe « at » ; consultez  openat(2).
              Depuis   glibc 2.10,  cette  macro  est  aussi  définie  de  manière  implicite  si
              _POSIX_C_SOURCE est définie avec une valeur supérieure ou égale à 200809L.

       _GNU_SOURCE
              Définir  cette  macro  (avec  n'importe  quelle   valeur)   définit   implicitement
              _ATFILE_SOURCE,    _LARGEFILE64_SOURCE,   _ISOC99_SOURCE,   _XOPEN_SOURCE_EXTENDED,
              _POSIX_SOURCE, _POSIX_C_SOURCE avec la valeur 200809L (200112L dans les versions de
              la  glibc  antérieures  à 2.10, 199506L dans les versions de la glibc antérieures à
              2.5, 199309L dans les versions de la glibc antérieures à 2.1) et _XOPEN_SOURCE avec
              la  valeur 700  (600 dans les versions de la glibc antérieures à 2.10, 500 dans les
              versions de la  glibc  antérieures  à  2.2).  De  plus,  de  nombreuses  extensions
              spécifiques GNU sont exposées.

              Depuis  la  glibc  2.19,  définir  _GNU_SOURCE  provoque la définition implicite de
              _DEFAULT_SOURCE. Dans les versions antérieures à 2.20, définir _GNU_SOURCE provoque
              la définition implicite de _BSD_SOURCE et _SVID_SOURCE.

       _REENTRANT
              Historiquement,  dans diverses bibliothèques C il était nécessaire de définir cette
              macro dans tous les codes  multithread  (cela  peut  être  encore  nécessaire  dans
              quelques  bibliothèques C). Dans la glibc, cette macro expose aussi des définitions
              de certaines fonctions réentrantes.

              Cependant, la glibc est thread-safe par défaut depuis de nombreuses années.  Depuis
              la  glibc 2.3,  le  seul  effet de définir _REENTRANT est d’activer une ou deux des
              mêmes déclarations qui sont activées en définissant _POSIX_C_SOURCE avec une valeur
              199606L ou supérieure.

              _REENTRANT est désormais obsolète. Dans la glibc 2.25 et les versions postérieures,
              définir _REENTRANT est équivalent  à  définir  _POSIX_C_SOURCE  avec  comme  valeur
              199606L.  Si  un niveau de conformité POSIX supérieur est sélectionné par n’importe
              quel autre moyen (tel que _POSIX_C_SOURCE lui-même, _XOPEN_SOURCE,  _DEFAULT_SOURCE
              ou _GNU_SOURCE), puis définir _REENTRANT n’a aucun effet.

              Cette   macro  est  automatiquement  définie  si  la  compilation  est  faite  avec
              cc -pthread.

       _THREAD_SAFE
              Synonyme de _REENTRANT (obsolète),  fourni  pour  la  compatibilité  avec  d'autres
              implémentations.

       _FORTIFY_SOURCE (depuis la glibc 2.3.4)
              Définir  cette  macro  cause  certaines vérifications peu poussées d’être réalisées
              pour détecter quelques dépassements de tampon lors de l’emploi de diverses  chaînes
              et  de  fonctions  de  manipulation  de mémoire (par exemple, memcpy(3), memset(3),
              stpcpy(3), strcpy(3), strncpy(3), strcat(3), strncat(3),  sprintf(3),  snprintf(3),
              vsprintf(3),  vsnprintf(3),  gets(3)  et  les  variantes  de  caractères  larges de
              celles-ci). Pour certaines fonctions, la pertinence de l’argument est vérifiée. Par
              exemple, une vérification est faite qu’un argument mode soit fourni à open(2) quand
              les indicateurs indiqués incluent O_CREAT. Tous les problèmes ne sont pas détectés,
              seulement quelques cas courants.

              Si  _FORTIFY_SOURCE  est défini à 1, avec un niveau 1 d'optimisation de compilateur
              (gcc -O1) ou supérieur, des vérifications sans influence  sur  le  comportement  de
              programmes   conformes   sont   faites.   Avec   _FORTIFY_SOURCE  défini  à 2,  des
              vérifications supplémentaires sont ajoutées,  mais  certains  programmes  conformes
              peuvent échouer.

              Certaines  vérifications  peuvent  être effectuées lors de la compilation (à l’aide
              d’une  logique  de  macros  implémentés  dans  les  en-têtes)   et   génèrent   des
              avertissements  du  compilateur.  D'autres  vérifications ont lieu à l'exécution et
              causent une erreur si le test échoue.

              L'utilisation de cette macro nécessite une gestion  par  le  compilateur,  qui  est
              disponible dans gcc(1) depuis la version 4.0.

   Définitions par défaut, définitions implicites et combinaison de définitions
       Si  aucune  macro de test de fonctionnalités n'est définie explicitement, alors les macros
       de test suivantes sont définies par défaut : _BSD_SOURCE (dans la  glibc 2.19  et  avant),
       _SVID_SOURCE  (dans  la  glibc 2.19  et  avant),  _DEFAULT_SOURCE  (depuis la glibc 2.19),
       _POSIX_SOURCE  et  _POSIX_C_SOURCE=200809L  (200112L  dans  les  versions  de   la   glibc
       antérieures  à 2.10, 199506L dans les versions de la glibc antérieures à 2.4, 199309L dans
       les versions de la glibc antérieures à 2.1).

       Si une des macros __STRICT_ANSI__, _ISOC99_SOURCE, _ISOC11_SOURCE (depuis  la  glibc 2.18)
       _POSIX_SOURCE,  _POSIX_C_SOURCE, _XOPEN_SOURCE, _XOPEN_SOURCE_EXTENDED (dans la glibc 2.11
       et avant), _BSD_SOURCE (dans la glibc 2.19 et avant) ou _SVID_SOURCE (dans  la  glibc 2.19
       et avant) est définie explicitement, alors _BSD_SOURCE, _SVID_SOURCE et _DEFAULT_SOURCE ne
       sont pas définies par défaut.

       Si ni _POSIX_SOURCE  ni  _POSIX_C_SOURCE  ne  sont  définies  explicitement  et  que  soit
       __STRICT_ANSI__  n'est  pas définie soit _XOPEN_SOURCE est définie à une valeur supérieure
       ou égale à 500, alors

       –  _POSIX_SOURCE est définie à la valeur 1

       –  _POSIX_C_SOURCE est définie avec une des valeurs suivantes :

          •  2, si _XOPEN_SOURCE est définie avec une valeur inférieure à 500 ;

          •  199506L, si _XOPEN_SOURCE est définie à une valeur supérieure  ou  égale  à  500  et
             inférieure à 600, ou

          •  200112L  (depuis la glibc 2.4), si _XOPEN_SOURCE est définie à une valeur supérieure
             ou égale à 600 et inférieure à 700 ;

          •  200809L (depuis la glibc 2.10), si _XOPEN_SOURCE est définie à une valeur supérieure
             ou égale à 700.

          •  Les  versions  plus  anciennes de la glibc ne connaissent pas les valeurs 200112L et
             200809L pour _POSIX_C_SOURCE et la configuration  de  cette  macro  dépendra  de  la
             version de la glibc.

          •  Si  _XOPEN_SOURCE n'est pas défini, alors la configuration de _POSIX_C_SOURCE dépend
             de la version de la glibc : 199506L pour les versions de la glibc antérieures à 2.4,
             200112L pour les glibc 2.4 à 2.9 et 200809L depuis la glibc 2.10.

       Plusieurs macros peuvent être définies, les résultats sont additifs.

CONFORMITÉ

       POSIX.1 spécifie _POSIX_C_SOURCE, _POSIX_SOURCE et _XOPEN_SOURCE.

       _XOPEN_SOURCE_EXTENDED  était  spécifiée  par  XPG4v2 (c’est-à-dire SUSv1), mais n’est pas
       présente dans SUSv2 et les  versions  suivantes.  _FILE_OFFSET_BITS  n’est  spécifiée  par
       aucune norme, mais est employée dans quelques autres implémentations.

       _BSD_SOURCE,  _SVID_SOURCE, _DEFAULT_SOURCE, _ATFILE_SOURCE, _GNU_SOURCE, _FORTIFY_SOURCE,
       _REENTRANT et _THREAD_SAFE sont spécifiques à Linux (glibc).

NOTES

       <features.h> est un fichier d'en‐tête spécifique à Linux/glibc. D'autres systèmes  ont  un
       fichier  similaire,  mais  typiquement  sous  un  nom  différent.  Ce  fichier  est inclus
       automatiquement par les autres  en‐têtes  si  nécessaire :  il  n'est  pas  nécessaire  de
       l'inclure explicitement pour utiliser les macros de test de fonctionnalités.

       Selon  quelles  macros  de  test  de fonctionnalités ci‐dessus sont définies, <features.h>
       définit diverses autres macros qui sont testées par les en‐têtes de la glibc.  Ces  macros
       ont  des  noms  préfixés par deux caractères de soulignement (par exemple __USE_MISC). Les
       programmes ne doivent jamais définir ces macros directement ;  ils  doivent  utiliser  les
       macros de test de fonctionnalités de la liste précédente.

EXEMPLES

       Le  programme ci-dessous peut être utilisé pour explorer comment les différentes macros de
       test de fonctionnalités sont configurées en fonction de la version de la glibc  et  quelle
       macros  sont  explicitement  définies.  L'exécution  qui  suit  dans  un  interpréteur  de
       commandes, sur un système avec la glibc 2.10, montre quelques exemples de  ce  qu'on  peut
       voir :

           $ cc ftm.c
           $ ./a.out
           _POSIX_SOURCE defined
           _POSIX_C_SOURCE defined: 200809L
           _BSD_SOURCE defined
           _SVID_SOURCE defined
           _ATFILE_SOURCE defined
           $ cc -D_XOPEN_SOURCE=500 ftm.c
           $ ./a.out
           _POSIX_SOURCE defined
           _POSIX_C_SOURCE defined: 199506L
           _XOPEN_SOURCE defined: 500
           $ cc -D_GNU_SOURCE ftm.c
           $ ./a.out
           _POSIX_SOURCE defined
           _POSIX_C_SOURCE defined: 200809L
           _ISOC99_SOURCE defined
           _XOPEN_SOURCE defined: 700
           _XOPEN_SOURCE_EXTENDED defined
           _LARGEFILE64_SOURCE defined
           _BSD_SOURCE defined
           _SVID_SOURCE defined
           _ATFILE_SOURCE defined
           _GNU_SOURCE defined

   Source du programme

       /* ftm.c */

       #include <stdint.h>
       #include <stdio.h>
       #include <unistd.h>
       #include <stdlib.h>

       int
       main(int argc, char *argv[])
       {
       #ifdef _POSIX_SOURCE
           printf("_POSIX_SOURCE defined\n");
       #endif

       #ifdef _POSIX_C_SOURCE
           printf("_POSIX_C_SOURCE defined: %jdL\n",
                   (intmax_t) _POSIX_C_SOURCE);
       #endif

       #ifdef _ISOC99_SOURCE
           printf("_ISOC99_SOURCE defined\n");
       #endif

       #ifdef _ISOC11_SOURCE
           printf("_ISOC11_SOURCE defined\n");
       #endif

       #ifdef _XOPEN_SOURCE
           printf("_XOPEN_SOURCE defined: %d\n", _XOPEN_SOURCE);
       #endif

       #ifdef _XOPEN_SOURCE_EXTENDED
           printf("_XOPEN_SOURCE_EXTENDED defined\n");
       #endif

       #ifdef _LARGEFILE64_SOURCE
           printf("_LARGEFILE64_SOURCE defined\n");
       #endif

       #ifdef _FILE_OFFSET_BITS
           printf("_FILE_OFFSET_BITS defined: %d\n", _FILE_OFFSET_BITS);
       #endif

       #ifdef _BSD_SOURCE
           printf("_BSD_SOURCE defined\n");
       #endif

       #ifdef _SVID_SOURCE
           printf("_SVID_SOURCE defined\n");
       #endif

       #ifdef _DEFAULT_SOURCE
           printf("_DEFAULT_SOURCE defined\n");
       #endif

       #ifdef _ATFILE_SOURCE
           printf("_ATFILE_SOURCE defined\n");
       #endif

       #ifdef _GNU_SOURCE
           printf("_GNU_SOURCE defined\n");
       #endif

       #ifdef _REENTRANT
           printf("_REENTRANT defined\n");
       #endif

       #ifdef _THREAD_SAFE
           printf("_THREAD_SAFE defined\n");
       #endif

       #ifdef _FORTIFY_SOURCE
           printf("_FORTIFY_SOURCE defined\n");
       #endif

           exit(EXIT_SUCCESS);
       }

VOIR AUSSI

       libc(7), standards(7), system_data_types(7)

       La section « Feature Test Macros » de info libc.

       /usr/include/features.h

COLOPHON

       Cette  page  fait partie de la publication 5.13 du projet man-pages Linux. Une description
       du projet et des instructions pour signaler des anomalies et la dernière version de  cette
       page peuvent être trouvées à l'adresse https://www.kernel.org/doc/man-pages/.

TRADUCTION

       La  traduction  française  de  cette  page  de  manuel  a  été créée par Christophe Blaess
       <https://www.blaess.fr/christophe/>, Stéphan  Rafin  <stephan.rafin@laposte.net>,  Thierry
       Vignaud  <tvignaud@mandriva.com>,  François Micaux, Alain Portal <aportal@univ-montp2.fr>,
       Jean-Philippe   Guérard   <fevrier@tigreraye.org>,   Jean-Luc   Coulon   (f5ibh)    <jean-
       luc.coulon@wanadoo.fr>,    Julien    Cristau    <jcristau@debian.org>,    Thomas   Huriaux
       <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin
       Duneau  <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis
       Barbier <barbier@debian.org>, David Prévot <david@tilapin.org>  et  Jean-Paul  Guillonneau
       <guillonneau.jeanpaul@free.fr>

       Cette  traduction  est  une  documentation libre ; veuillez vous reporter à la GNU General
       Public  License  version 3  ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩   concernant   les
       conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

       Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un
       message à ⟨debian-l10n-french@lists.debian.org⟩.