Provided by: manpages-fr_3.57d1p1-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é.

       NOTE :  pour  avoir  un effet, une macro de test de fonctionnalité 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.

       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>

   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 acct(2)) :

               #include <unistd.h>

               int acct(const char *filename);

           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,  les  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é
       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__
              La  norme  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).

              •  (Depuis la glibc 2.10) Les valeurs supérieures ou égales à 200809L exposent  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.

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

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

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

       _ISOC95_SOURCE
              Exposer les définitions du premier amendement au C ISO (1990) (aussi  appelé  C95).
              Cette  macro  est  reconnue  depuis  la glibc 2.12. La première modification de C95
              était la prise en charge des jeux de caractères internationaux.  Les  modifications
              de  C95 ont été intégrées à la norme C99 qui a suivi (autrement dit, _ISOC99_SOURCE
              implique _ISOC95_SOURCE).

       _ISOC99_SOURCE
              Exposer 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 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.

       _ISOC11_SOURCE
              Exposer des déclarations cohérentes avec la norme ISO C11. Cette macro est reconnue
              depuis glibc 2.16.

       _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
              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è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. Jusqu’à la glibc 2.18 inclue, 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.

       _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  System V.  (SVID  ==  System V  Interface  Definition ;
              consultez standards(7).)

       _DEFAULT_SOURCE (depuis la glibc 2.19)
              Définir cette macro fournit un effet similaire aux macros de test de fonctionnalité
              qui sont définies par défaut, c’est-à-dire :

                  cc -D_BSD_SOURCE -D_SVID_SOURCE -D_POSIX_C_SOURCE=200809

              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).

       _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).
              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)  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 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. Quand les normes
              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=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 à ).

       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

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

                •  (Depuis la glibc 2.10) 200809L, 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  version  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
       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.

EXEMPLE

       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 définie
           _POSIX_C_SOURCE définie : 200809L
           _BSD_SOURCE définie
           _SVID_SOURCE définie
           _ATFILE_SOURCE définie
           $ cc -D_XOPEN_SOURCE=500 ftm.c
           $ ./a.out
           _POSIX_SOURCE définie
           _POSIX_C_SOURCE définie : 199506L
           _XOPEN_SOURCE définie : 500
           $ cc -D_GNU_SOURCE ftm.c
           $ ./a.out
           _POSIX_SOURCE définie
           _POSIX_C_SOURCE définie : 200809L
           _ISOC99_SOURCE définie
           _XOPEN_SOURCE définie : 700
           _XOPEN_SOURCE_EXTENDED définie
           _LARGEFILE64_SOURCE définie
           _BSD_SOURCE définie
           _SVID_SOURCE définie
           _ATFILE_SOURCE définie
           _GNU_SOURCE définie

   Source du programme

       /* ftm.c */

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

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

       #ifdef _POSIX_C_SOURCE
           printf("_POSIX_C_SOURCE définie : %ldL\n", (long) _POSIX_C_SOURCE);
       #endif

       #ifdef _ISOC99_SOURCE
           printf("_ISOC99_SOURCE définie\n");
       #endif

       #ifdef _ISOC11_SOURCE
           printf("_ISOC11_SOURCE définie\n");
       #endif

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

       #ifdef _XOPEN_SOURCE_EXTENDED
           printf("_XOPEN_SOURCE_EXTENDED définie\n");
       #endif

       #ifdef _LARGEFILE64_SOURCE
           printf("_LARGEFILE64_SOURCE définie\n");
       #endif

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

       #ifdef _BSD_SOURCE
           printf("_BSD_SOURCE définie\n");
       #endif

       #ifdef _SVID_SOURCE
           printf("_SVID_SOURCE définie\n");
       #endif

       #ifdef _ATFILE_SOURCE
           printf("_ATFILE_SOURCE définie\n");
       #endif

       #ifdef _GNU_SOURCE
           printf("_GNU_SOURCE définie\n");
       #endif

       #ifdef _REENTRANT
           printf("_REENTRANT définie\n");
       #endif

       #ifdef _THREAD_SAFE
           printf("_THREAD_SAFE définie\n");
       #endif

       #ifdef _FORTIFY_SOURCE
           printf("_FORTIFY_SOURCE définie\n");
       #endif

           exit(EXIT_SUCCESS);
       }

VOIR AUSSI

       libc(7), standards(7)

       La section « Feature Test Macros » de info libc.

       /usr/include/features.h

COLOPHON

       Cette page fait partie de la publication 3.57 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

       Depuis   2010,   cette   traduction   est   maintenue   à   l'aide   de    l'outil    po4a
       <http://po4a.alioth.debian.org/>  par l'équipe de traduction francophone au sein du projet
       perkamon <http://perkamon.alioth.debian.org/>.

       Julien Cristau et l'équipe francophone de traduction de Debian (2006-2009).

       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> ».