Provided by: manpages-fr_3.27fr1.4-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 standard, en empechant des definitions non standard d'etre
       exposees.  D'autres  macros  peuvent  etre  utilisees  pour exposer des
       definitions non standard 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 chmod(2)) :

                 #include <sys/stat.h>

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

             Exigences de macros de test de fonctionnalites pour
             la glibc (consultez feature_test_macros(7)) :

                 fchmod() : _BSD_SOURCE || _XOPEN_SOURCE >= 500

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

              #define _BSD_SOURCE
              #define _XOPEN_SOURCE 500     /* 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=500        # 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__
              Le standard 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
              Expose 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 le standard C99 n'etait pas finalise).
              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 standards 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 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 <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: %ldL\n", (long) _POSIX_C_SOURCE);
       #endif

       #ifdef _ISOC99_SOURCE
           printf("_ISOC99_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 _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)

       La section << Feature Test Macros >> de info libc.

       /usr/include/features.h

COLOPHON

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