Provided by: manpages-fr_2.80.1-1_all bug

NOM

       feature_test_macros - Macros de test de fonctionnalités

SYNOPSIS

       #include <features.h>

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é.  Cela peut être utile pour
       créer des applications  standard,  en  empêchant  des  définitions  non
       standard  d’être  exposées. D’autres macros peuvent être utilisées pour
       exposer des définitions non standard  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>

       Pour avoir un effet, une macro de  test  de  fonctionnalité  doit  tre
       dfinie avant dinclure tout fichier dentte. 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.

   Spécification des exigences de macro de test  de  fonctionnalité  dans  les
       pages de manuel
       Quand  une  fonction  nécessite  qu’une macro de test de fonctionnalité
       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 chmod(2)) :

              #include <sys/stat.h>

              int chmod(const char *path, mode_t mode);
              int fchmod(int fd, mode_t mode);

          Feature    Test    Macro     Requirements     for     glibc     (see
          feature_test_macros(7)):
          (C’est-à-dire :   « Exigences   pour   les   macros   de   test   de
          fonctionnalité de la glibc (consultez feature_test_macros(7)) : »)

              fchmod() : _BSD_SOURCE || _XOPEN_SOURCE >= 500

       Les doubles barres || signifies qua  pour  obtenir  la  déclaration  de
       fchmod(2)  depuis <sys/stat.h>, une des définitions de macros doit être
       utilisée avant d’inclure les fichier d’en-tête :

              #define _BSD_SOURCE
              #define _XOPEN_SOURCE 500     /* ou toute valeur > 500 */

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

              cc -D_BSD_SOURCE
              cc -D_XOPEN_SOURCE=500        # Ou toute valeur > 500

       Veuillez  noter  que, comme décrit ci-dessous, certaines macros de test
       de fonctionnalité 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é  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é sont gérées les glibc Linux 2.x, x > 0.

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

       __STRICT_ANSI__
              Le standard C ISO. Cette macro  est  définie  implicitement  par
              gcc(1)  lors  des appels avec, par exemple, l’option -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  avec
                 POSIX.1-1990 et le 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  les  définitions  correspondantes   à   la
                 spécification de base POSIX.1-2001 (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.

       _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 fournies.

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

              ·  (Depuis la glibc 2.2) Les valeurs supérieures ou égales à 600
                 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 sont exposées en plus des précédentes.

       _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) Cette macro est  également  définie  implicitement  si
              _XOPEN_SOURCE  est définie avec une valeur supérieure ou égale à
              500.

       _ISOC99_SOURCE
              Expose les extensions C99 du  C  ISO  (1990).  Cette  macro  est
              reconnue  depuis la glibc 2.1.3 ; les versions antérieures de la
              glibc  2.1.x  reconnaissaient  une  macro   équivalent   appelée
              _ISOC9X_SOURCE (parce que le standard C99 n’était pas finalisé).
              Même si l’utilisation de cette dernière macro est  à  proscrire,
              la   glibc  continue  à  la  reconnaître  pour  des  raisons  de
              compatibilité descendante.

       _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  en  suffixé de « 64 » (par
              exemple off64_t pour off_t, lseek64() pour lseek(),  etc.).  Les
              nouveaux programmes ne devraient pas utiliser ces interfaces ; à
              la place, _FILE_OFFSET_BITS=64 devrait être utilisée.

       _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   fichier   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ème cette macro n’a aucun effet.

       _BSD_SOURCE
              Si cette macro est définie, les définitions héritées de BSD sont
              exposées par les en‐têtes. De plus,  les  définitions  BSD  sont
              préférées  dans  les situations où les normes sont en conflit, à
              moins qu’une (ou plus) des macros  _SVID_SOURCE,  _POSIX_SOURCE,
              _POSIX_C_SOURCE,    _XOPEN_SOURCE,   _XOPEN_SOURCE_EXTENDED   ou
              _GNU_SOURCE soit définie, auquel cas les  définitions  BSD  sont
              défavorisées.

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

       _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  fonction  avec
              le suffixe « at » ; consultez openat(2).

       _GNU_SOURCE
              Définir   cette   macro   (avec  n’importe  quelle  valeur)  est
              équivalent à définir _BSD_SOURCE, _SVID_SOURCE,  _ATFILE_SOURCE,
              _LARGEFILE64_SOURCE,   _ISOC99_SOURCE,   _XOPEN_SOURCE_EXTENDED,
              _POSIX_SOURCE, _POSIX_C_SOURCE avec la valeur  200112L  (199506L
              dans   les   versions   de  la  glibc  inférieures  à  2.5),  et
              _XOPEN_SOURCE avec la valeur 600 (500 dans les  versions  de  la
              glibc  inférieures  à  2.2).  De  plus, de nombreuses extensions
              spécifiques  GNU  sont  exposées.   Quand   les   standards   se
              contredisent, les définitions BSD sont les moins prioritaires.

       _REENTRANT
              Définir   cette   macro  rend  accessibles  les  définitions  de
              certaines   fonctions   réentrantes.   Pour    les    programmes
              multithreadés, utilisez cc -pthread à la place.

       _THREAD_SAFE
              Synonyme  de  _REENTRANT,  fourni  pour  la  compatibilité  avec
              d’autres implémentations.

       _FORTIFY_SOURCE (depuis la glibc 2.3.4)
              Définir cette macro  active  certains  tests  peu  coûteux  pour
              détecter   certains   dépassements   de  tampons  dans  diverses
              fonctions de manipulation de chaînes ou  de  mémoire.  Tous  les
              dépassements  de  tampons  ne sont pas détectés, mais uniquement
              certains cas fréquents.  Actuellement,  des  vérifications  sont
              ajoutées  pour  les  appels à memcpy(3), mempcpy(3), memmove(3),
              memset(3),   stpcpy(3),   strcpy(3),   strncpy(3),    strcat(3),
              strncat(3),  sprintf(3), snprintf(3), vsprintf(3), vsnprintf(3),
              et gets(3). Si _FORTIFY_SOURCE est défini à 1,  avec  un  niveau
              d’optimisation  de  1  ou plus (gcc -O1), des vérifications sans
              influence sur  le  comportement  des  programmes  corrects  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 à la compilation et génèrent  des  avertissements  du
              compilateur ;  d’autres  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é n’est définie explicitement,
       alors  les  macros  de  test  suivantes  sont  définies  par   défaut :
       _BSD_SOURCE,  _SVID_SOURCE,  _POSIX_SOURCE  et  _POSIX_C_SOURCE=200112L
       (199506L dans les versions de la glibc antérieures à 2.4).

       Si  une  des  macros  __STRICT_ANSI__,  _ISOC99_SOURCE,  _POSIX_SOURCE,
       _POSIX_C_SOURCE,  _XOPEN_SOURCE, _XOPEN_SOURCE_EXTENDED, _BSD_SOURCE ou
       _SVID_SOURCE  est   définie   explicitement,   alors   _BSD_SOURCE   et
       _SVID_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 ; et

          *  _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 (199506L dans les version de la glibc antérieures à
                   2.4), si XOPEN_SOURCE n’est pas définie ou  est  définie  à
                   une valeur supérieure ou égale à 600.

       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 est spécifiée par XPG4v2 (alias SUSv1).

       _FILE_OFFSET_BITS n’est spécifiée par aucune norme, mais  est  utilisée
       par d’autres implémentations.

       _BSD_SOURCE,       _SVID_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é.

       Selon quelles macros de test de fonctionnalité 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 underscore  (par  exemple  __USE_MISC).  Les  programmes  ne
       doivent  jamais  définir  ces macros directement ; ils doivent utiliser
       les macros de test de fonctionnalité de la liste précédente.

VOIR AUSSI

       standards(7)

       La section « Feature Test Macros » de info libc.

       /usr/include/features.h

COLOPHON

       Cette page fait partie de  la  publication  2.80  du  projet  man-pages
       Linux.  Une description du projet et des instructions pour signaler des
       anomalies      peuvent      être       trouvées       à       l’adresse
       http://www.kernel.org/doc/man-pages/.

TRADUCTION

       Cette page de manuel a été traduite et est maintenue par Julien Cristau
       <julien.cristau@ens-lyon.org> et l’équipe francophone de traduction  de
       Debian.

       Veuillez   signaler   toute   erreur   de   traduction  en  écrivant  à
       <debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
       paquet manpages-fr.

       Vous  pouvez  toujours avoir accès à la version anglaise de ce document
       en utilisant la commande « man -L C <section> <page_de_man> ».