Provided by: manpages-fr_3.32d0.2p4-1_all bug

NOM

       feature_test_macros - Macros de test de fonctionnalites

SYNOPSIS

       #include <features.h>

DESCRIPTION

       Les  macros  de  test  de  fonctionnalites permettent au programmeur de
       controler quelles definitions sont exposees par les fichiers d'en-tetes
       systeme lorsqu'un programme est compile.

       NOTE :  pour  avoir  un effet, une macro de test de fonctionnalite doit
       ^etre d'efinie avant d'inclure tout fichier  d'en-t^ete.  Cela  peut  etre
       accompli   soit   dans   la   ligne  de  commande  de  compilation  (cc
       -DMACRO=valeur), soit en definissant la macro dans le code source avant
       d'inclure tout en-tete.

       Certaines  macros de test de fonctionnalites sont utiles pour creer des
       applications portables, en empechant des  definitions  non  normalisees
       d'etre  exposees.  D'autres  macros peuvent etre utilisees pour exposer
       des definitions non normalisees qui ne sont pas  exposees  par  defaut.
       Les  effets  precis  de  chacune des macros decrites ci-dessous peuvent
       etre verifies en inspectant le fichier d'en-tete <features.h>

   Sp'ecification des exigences de macro de test  de  fonctionnalit'e  dans  les
       pages de manuel
       Quand  une  fonction  necessite  qu'une macro de test de fonctionnalite
       soit definie, la  section  SYNOPSIS  de  la  page  de  manuel  comprend
       generalement  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 fonctionnalites pour
           la glibc (consultez feature_test_macros(7)) :

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

       Les doubles barres || signifies qua  pour  obtenir  la  declaration  de
       acct(2)  depuis  <unistd.h>,  une  des  definitions de macros doit etre
       utilisee avant d'inclure les fichiers d'en-tete :

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

       Autrement, les definitions equivalentes peuvent  etre  faites  lors  de
       l'appel au compilateur :

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

       Veuillez  noter  que, comme decrit ci-dessous, certaines macros de test
       de fonctionnalit'e sont d'efinies  par  d'efaut,  et  il  n'est  donc  pas
       toujours  necessaire  de  specifier  explicitement les macros indiquees
       dans le SYNOPSIS.

       Dans certains cas, les pages de manuel utilisent  des  raccourcis  pour
       exprimer  la  necessite  de  certaines  macros de test (exemple tire de
       readahead(2)) :

              #define _GNU_SOURCE
              #include <fcntl.h>

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

       Ce format est utilise dans les cas  ou  seule  une  macro  de  test  de
       fonctionnalite  peut  etre  utilisee  pour exposer la declaration de la
       fonction et quand cette macro n'est pas definie par defaut.

   Macros de test de fonctionnalit'es comprises par la glibc
       Les paragraphes suivants expliquent  comment  les  macros  de  test  de
       fonctionnalite sont gerees les glibc Linux 2.x, x > 0.

       La  glibc  de  Linux  comprend  les  macros  de  test de fonctionnalite
       suivantes :

       __STRICT_ANSI__
              La norme C ISO. Cette macro est definie implicitement par gcc(1)
              lors des appels avec, par exemple, l'option -std=c99 ou -ansi.

       _POSIX_C_SOURCE
              Si   cette   macro   est  definie,  les  en-tetes  exposent  les
              definitions suivantes :

              o  La   valeur 1   expose   les   definitions   conformes   avec
                 POSIX.1-1990 et le C ISO (1990).

              o  Les  valeurs  superieures  ou egales a 2 exposent en plus les
                 definitions de POSIX.2-1992.

              o  Les valeurs superieures ou egales a 199309L exposent en  plus
                 les definitions de POSIX.1b (extensions temps-reel).

              o  Les  valeurs superieures ou egales a 199506L exposent en plus
                 les definitions de POSIX.1c (threads).

              o  (Depuis la glibc 2.3.3) Les valeurs superieures ou  egales  a
                 200112L   exposent   les  definitions  correspondantes  a  la
                 specification de base POSIX.1-2001 (sans l'extension XSI).

              o  (Depuis la glibc 2.10) Les valeurs superieures  ou  egales  a
                 200809L   exposent   les  definitions  correspondantes  a  la
                 specification de base POSIX.1-2008 (sans l'extension XSI).

       _POSIX_SOURCE
              Definir cette macro obsolete (quelle que  soit  sa  valeur)  est
              equivalent a definir _POSIX_C_SOURCE a la valeur 1.

       _XOPEN_SOURCE
              Si   cette   macro   est  definie,  les  en-tetes  exposent  les
              definitions suivantes :

              o  Si  elle  est  definie,  quelle  que  soit  sa  valeur,   les
                 definitions de POSIX.1, POSIX.2 et XPG4 sont fournies.

              o  Les  valeurs  superieures  ou  egales  a  500 fournissent les
                 definitions de SUSv2 (UNIX 98).

              o  (Depuis la glibc 2.2) Les valeurs superieures ou egales a 600
                 les   definitions   de   SUSv3   (UNIX 03,   c'est-a-dire  la
                 specification de base POSIX.1-2001 plus l'extension  XSI)  et
                 de C99 sont exposees en plus des precedentes.

              o  (Depuis  la  glibc 2.10)  Les valeurs superieures ou egales a
                 700 exposents  les  definitions  de  SUSv4  (c'est-a-dire  la
                 specification de base POSIX.1-2008 plus l'extension XSI).

       _XOPEN_SOURCE_EXTENDED
              Si  cette  macro  et  _XOPEN_SOURCE  sont  definies, exposer les
              definitions correspondant aux extensions XPG4v2  (SUSv1)  d'UNIX
              (UNIX 95)  Cette  macro  est  egalement definie implicitement si
              _XOPEN_SOURCE est definie avec une valeur superieure ou egale  a
              500.

       _ISOC99_SOURCE
              Exposer  les  extensions  C99  du  C ISO (1990). Cette macro est
              reconnue depuis la glibc 2.1.3 ; les versions anterieures de  la
              glibc 2.1.x   reconnaissaient   une   macro  equivalent  appelee
              _ISOC9X_SOURCE (parce que la norme C99 n'etait  pas  finalisee).
              Meme  si  l'utilisation de cette derniere macro est a proscrire,
              la  glibc  continue  a  la  reconnaitre  pour  des  raisons   de
              compatibilite ascendante.

       _LARGEFILE64_SOURCE
              Exposer  les  definitions  pour l'API alternative definie par le
              LFS (<< Large File Summit >>) comme une extension de  transition
              pour la << Single UNIX Specification >>. Veuillez vous referer a
              http://opengroup.org/platform/lfs.html.    L'API     alternative
              consiste   en  un  jeu  de  nouveaux  objets  (c'est-a-dire  des
              fonctions et types) dont le nom  en  suffixe  de  << 64 >>  (par
              exemple  off64_t  pour off_t, lseek64() pour lseek(), etc.). Les
              nouveaux programmes ne devraient pas utiliser ces interfaces ; a
              la place, _FILE_OFFSET_BITS=64 devrait etre utilisee.

       _FILE_OFFSET_BITS
              Definir cette macro a la valeur 64 convertit automatiquement les
              references aux fonctions et types de donnees  32 bits  lies  aux
              E/S  sur  les  fichiers  et  aux  operations  sur  le systeme de
              fichiers en references a leurs equivalents 64 bits. C'est  utile
              pour  les  E/S  sur  des  gros fichiers (> 2 gigaoctets) sur les
              systemes 32 bits. Cette macro permet aux programmes correctement
              ecrits   d'utiliser   de   gros   fichiers  avec  seulement  une
              recompilation.  Les   systemes   64 bits   permettent   d'office
              d'utiliser  des fichiers de taille superieure a 2 gigaoctets, et
              sur ces systeme cette macro n'a aucun effet.

       _BSD_SOURCE
              Si cette macro est definie, les definitions heritees de BSD sont
              exposees  par  les  en-tetes.  De plus, les definitions BSD sont
              preferees dans les situations ou les normes sont en  conflit,  a
              moins  qu'une  (ou plus) des macros _SVID_SOURCE, _POSIX_SOURCE,
              _POSIX_C_SOURCE,   _XOPEN_SOURCE,   _XOPEN_SOURCE_EXTENDED    ou
              _GNU_SOURCE  soit  definie,  auquel cas les definitions BSD sont
              defavorisees.

       _SVID_SOURCE
              Si cette macro est definie (quelle que soit sa valeur), les  en-
              tetes  exposent  les  definitions heritees de System V. (SVID ==
              System V Interface Definition ; consultez standards(7).)

       _ATFILE_SOURCE (depuis la glibc 2.4)
              Si cette macro est definie (quelle  que  soit  sa  valeur),  les
              en-tetes  exposent  les definitions d'une serie de fonction avec
              le suffixe << at >> ; consultez  openat(2).  Depuis  glibc 2.10,
              cette   macro   est   aussi  definie  de  maniere  implicite  si
              _POSIX_C_SOURCE est definie avec une valeur superieure ou  egale
              a 200809L.

       _GNU_SOURCE
              Definir   cette   macro   (avec  n'importe  quelle  valeur)  est
              equivalent a definir _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 anterieures a 2.10 ; 199506L dans
              les versions de la glibc anterieures a 2.5 ;  199309L  dans  les
              versions  de  la glibc anterieures a 2.1), et _XOPEN_SOURCE avec
              la valeur 700 (600 dans les versions de la glibc  anterieures  a
              2.10 ;  500 dans les versions de la glibc anterieures a 2.2). De
              plus, de nombreuses extensions specifiques  GNU  sont  exposees.
              Quand  les  normes se contredisent, les definitions BSD sont les
              moins prioritaires.

       _REENTRANT
              Definir  cette  macro  rend  accessibles  les   definitions   de
              certaines    fonctions    reentrantes.   Pour   les   programmes
              multithreades, utilisez cc -pthread a la place.

       _THREAD_SAFE
              Synonyme  de  _REENTRANT,  fourni  pour  la  compatibilite  avec
              d'autres implementations.

       _FORTIFY_SOURCE (depuis la glibc 2.3.4)
              Definir  cette  macro  active  certains  tests  peu couteux pour
              detecter  certains  depassements  de   tampons   dans   diverses
              fonctions  de  manipulation  de  chaines ou de memoire. Tous les
              depassements de tampons ne sont pas  detectes,  mais  uniquement
              certains  cas  frequents.  Actuellement,  des verifications sont
              ajoutees pour les appels a  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 defini a 1, avec un niveau
              d'optimisation de 1 ou plus (gcc -O1),  des  verifications  sans
              influence  sur  le  comportement  des  programmes  corrects sont
              faites. Avec  _FORTIFY_SOURCE  defini  a  2,  des  verifications
              supplementaires   sont   ajoutees,   mais   certains  programmes
              conformes peuvent echouer. Certaines verifications peuvent  etre
              effectuees  a  la  compilation et generent des avertissements du
              compilateur ; d'autres ont lieu a  l'execution  et  causent  une
              erreur si le test echoue. L'utilisation de cette macro necessite
              une gestion par le compilateur, qui est disponible  dans  gcc(1)
              depuis la version 4.0.

   D'efinitions   par   d'efaut,   d'efinitions   implicites  et  combinaison  de
       d'efinitions
       Si aucune macro de test de fonctionnalite n'est definie  explicitement,
       alors   les  macros  de  test  suivantes  sont  definies  par  defaut :
       _BSD_SOURCE,  _SVID_SOURCE,  _POSIX_SOURCE  et  _POSIX_C_SOURCE=200809L
       (200112L  dans  les  versions  de la glibc anterieures a 2.10 ; 199506L
       dans les versions de la glibc anterieures  a  2.4 ;  199309L  dans  les
       versions de la glibc anterieures a ).

       Si  une  des  macros  __STRICT_ANSI__,  _ISOC99_SOURCE,  _POSIX_SOURCE,
       _POSIX_C_SOURCE, _XOPEN_SOURCE, _XOPEN_SOURCE_EXTENDED, _BSD_SOURCE  ou
       _SVID_SOURCE   est   definie   explicitement,   alors   _BSD_SOURCE  et
       _SVID_SOURCE ne sont pas definies par defaut.

       Si ni _POSIX_SOURCE ni _POSIX_C_SOURCE ne sont  definies  explicitement
       et  que  soit  __STRICT_ANSI__ n'est pas definie soit _XOPEN_SOURCE est
       definie a une valeur superieure ou egale a 500, alors

          *  _POSIX_SOURCE est definie a la valeur 1 ; et

          *  _POSIX_C_SOURCE est definie avec une des valeurs suivantes :

                o  2, si XOPEN_SOURCE est definie avec une valeur inferieure a
                   500 ;

                o  199506L,   si   XOPEN_SOURCE   est  definie  a  une  valeur
                   superieure ou egale a 500 et inferieure a 600 ; ou

                o  (Depuis la glibc 2.4) 200112L, si XOPEN_SOURCE est  definie
                   a une valeur superieure ou egale a 600 et inferieure a 700.

                o  (Depuis la glibc 2.10) 200809L, si XOPEN_SOURCE est definie
                   a une valeur superieure ou egale a 700.

                o  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 dependra de la version  de  la
                   glibc.

                o  Si  _XOPEN_SOURCE  n'est pas defini, alors la configuration
                   de _POSIX_C_SOURCE depend  de  la  version  de  la  glibc :
                   199506L  pour  les  version de la glibc anterieures a 2.4 ;
                   200112L pour les glibc 2.4 a 2.9 ;  et  200809L  depuis  la
                   glibc 2.10.

       Plusieurs macros peuvent etre definies ; les resultats sont additifs.

CONFORMIT'E

       POSIX.1   specifie  _POSIX_C_SOURCE,  _POSIX_SOURCE  et  _XOPEN_SOURCE.
       _XOPEN_SOURCE_EXTENDED est specifiee par XPG4v2 (alias SUSv1).

       _FILE_OFFSET_BITS n'est specifiee par aucune norme, mais  est  utilisee
       par d'autres implementations.

       _BSD_SOURCE,       _SVID_SOURCE,      _ATFILE_SOURCE,      _GNU_SOURCE,
       _FORTIFY_SOURCE, _REENTRANT et _THREAD_SAFE sont  specifiques  a  Linux
       (glibc).

NOTES

       <features.h>   est  un  fichier  d'en-tete  specifique  a  Linux/glibc.
       D'autres systemes ont un fichier similaire, mais  typiquement  sous  un
       nom different. Ce fichier est inclus automatiquement par les autres en-
       tetes  si  necessaire :  il   n'est   pas   necessaire   de   l'inclure
       explicitement pour utiliser les macros de test de fonctionnalite.

       Selon quelles macros de test de fonctionnalite ci-dessus sont definies,
       <features.h> definit diverses autres macros qui sont  testees  par  les
       en-tetes  de  la  glibc.  Ces  macros  ont  des  noms prefixes par deux
       caracteres underscore  (par  exemple  __USE_MISC).  Les  programmes  ne
       doivent  jamais  definir  ces macros directement ; ils doivent utiliser
       les macros de test de fonctionnalite de la liste precedente.

EXEMPLE

       Le programme ci-dessous peut etre utilise  pour  explorer  comment  les
       differentes  macros  de  test  de  fonctionnalites  sont configurees en
       fonction de la version de la glibc et quelle macros sont  explicitement
       definies.  L'execution  qui suit dans un interpreteur de commandes, sur
       un systeme avec la glibc 2.10, montre quelques  exemples  de  ce  qu'on
       peut voir :

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

   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 definie\n");
       #endif

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

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

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

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

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

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

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

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

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

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

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

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

       #ifdef _FORTIFY_SOURCE
           printf("_FORTIFY_SOURCE definie\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.32 du projet man-pages
       Linux. Une description du projet et des instructions pour signaler  des
       anomalies       peuvent       etre       trouvees      a      l'adresse
       <URL:http://www.kernel.org/doc/man-pages/>.

TRADUCTION

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

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

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

       Vous pouvez toujours avoir acces a la version anglaise de  ce  document
       en utilisant la commande << man -L C <section> <page_de_man> >>.