dwww Home | Manual pages | Find package

feature_test_macros(7) Miscellaneous Information Manual feature_test_macros(7)

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 ac-
       compli  soit  dans  la ligne de commande de compilation (cc -DMACRO=va-
       leur), 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>.  Re-
       marque :  les applications n’ont pas besoin d’inclure directement <fea-
       tures.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éra-
       lement une note de la forme suivante (exemple pris dans la page de  ma-
       nuel 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 uti-
       lisé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 tou-
       jours 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 rea-
       dahead(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 fonc-
       tionnalités peut être utilisée pour exposer la déclaration de la  fonc-
       tion 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 fonc-
       tionnalité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 di-
          verses versions de POSIX.1), _XOPEN_SOURCE (pour des définitions  de
          diverses versions de SUS), _GNU_SOURCE (pour certaines choses spéci-
          fiques à GNU ou Linux) et _DEFAULT_SOURCE (pour obtenir des  défini-
          tions 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  su-
          pé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  su-
          pé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

       glibc understands the following feature test macros:

       __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éfini-
              tions 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éra-
              lement  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éfini-
              tions suivantes :

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

              •  Les valeurs supérieures ou égales à 500 exposent les  défini-
                 tions 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éci-
                 fication 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 _PO-
              SIX_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  _XO-
                 PEN_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éfi-
              nitions  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_EX-
              TENDED.  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_EX-
              TENDED, cette dernière (obsolète) macro de test de fonctionnali-
              té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  amen-
              dement  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 fonc-
              tions 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  pro-
              grammes  ne  devraient  pas  utiliser  cette macro. Définir _XO-
              PEN_SOURCE comme cela vient d’être décrit ou définir  _FILE_OFF-
              SET_BITS  à la valeur 64 sont les mécanismes préférés pour obte-
              nir 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  fi-
              chiers  en  références  à leurs équivalents 64 bits. C'est utile
              pour les E/S sur des gros fichiers (> 2 gigaoctets) sur les sys-
              tèmes  32 bits.  Cette  macro permet aux programmes correctement
              écrits d'utiliser de gros fichiers avec seulement une recompila-
              tion.

              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.

       _TIME_BITS
              Defining  this  macro  with  the  value  64 changes the width of
              time_t(3type) to 64-bit  which  allows  handling  of  timestamps
              beyond  2038. It is closely related to _FILE_OFFSET_BITS and de-
              pending on implementation, may require it  set.  This  macro  is
              available as of glibc 2.34.

       _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,  _PO-
              SIX_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 ma-
              nière que _BSD_SOURCE.

       _DEFAULT_SOURCE (depuis la glibc 2.19)
              This macro can be defined to ensure that the  "default"  defini-
              tions are provided even when the defaults would otherwise be di-
              sabled, as happens when individual macros are  explicitly  defi-
              ned,  or  the compiler is invoked in one of its "standard" modes
              (e.g., cc -std=c99). Defining _DEFAULT_SOURCE  without  defining
              other  individual  macros or invoking the compiler in one of its
              "standard" modes has no effect.

              Les définitions par « défaut » incluent celles requises par  PO-
              SIX.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 expli-
              cite 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 _PO-
              SIX_C_SOURCE est définie avec une valeur supérieure ou  égale  à
              200809L.

       _GNU_SOURCE
              Defining  this  macro  (with  any value) implicitly defines _AT-
              FILE_SOURCE,    _LARGEFILE64_SOURCE,    _ISOC99_SOURCE,     _XO-
              PEN_SOURCE_EXTENDED, _POSIX_SOURCE, _POSIX_C_SOURCE with the va-
              lue 200809L (200112L before glibc  2.10;  199506L  before  glibc
              2.5; 199309L before glibc 2.1)  and _XOPEN_SOURCE with the value
              700 (600 before glibc 2.10; 500 before glibc 2.2). In  addition,
              various GNU-specific extensions are also exposed.

              Since  glibc  2.19,  defining _GNU_SOURCE also has the effect of
              implicitly defining _DEFAULT_SOURCE. Before glibc 2.20, defining
              _GNU_SOURCE   also   had   the  effect  of  implicitly  defining
              _BSD_SOURCE and _SVID_SOURCE.

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

              Cependant, la glibc est thread-safe par défaut  depuis  de  nom-
              breuses  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éfi-
              nir _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 au-
              cun effet.

              This  macro  is  automatically  defined  if  one  compiles  with
              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  manipu-
              lation de mémoire (par exemple, memcpy(3), memset(3), stpcpy(3),
              strcpy(3), strncpy(3), strcat(3),  strncat(3),  sprintf(3),  sn-
              printf(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érifi-
              cation 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'optimisa-
              tion  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 sup-
              plémentaires sont ajoutées, mais certains  programmes  conformes
              peuvent échouer.

              Certaines  vérifications peuvent être effectuées lors de la com-
              pilation (à 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 er-
              reur si le test échoue.

              With  _FORTIFY_SOURCE  set to 3, additional checking is added to
              intercept some function calls used with an argument of  variable
              size where the compiler can deduce an upper bound for its value.
              For example, a program where malloc(3)'s size  argument  is  va-
              riable can now be fortified.

              Use  of  this  macro  requires  compiler support, available with
              gcc(1)  since glibc 4.0.

              Use of _FORTIFY_SOURCE set to 3 requires gcc(1)  version 12.0 or
              later.

   Définitions  par  défaut,  définitions implicites et combinaison de défini-
       tions
       If no feature test macros are explicitly defined,  then  the  following
       feature  test macros are defined by default: _BSD_SOURCE (in glibc 2.19
       and earlier), _SVID_SOURCE (in glibc 2.19 and earlier), _DEFAULT_SOURCE
       (since glibc 2.19), _POSIX_SOURCE, and _POSIX_C_SOURCE=200809L (200112L
       before glibc 2.10; 199506L before glibc 2.4; 199309L before glibc 2.1).

       Si une des macros __STRICT_ANSI__, _ISOC99_SOURCE, _ISOC11_SOURCE  (de-
       puis la glibc 2.18) _POSIX_SOURCE, _POSIX_C_SOURCE, _XOPEN_SOURCE, _XO-
       PEN_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   _DE-
       FAULT_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  configura-
             tion de cette macro dépendra de la version de la glibc.

          •  If   _XOPEN_SOURCE   is  undefined,  then  the  setting  of  _PO-
             SIX_C_SOURCE depends on the glibc version: 199506L, before  glibc
             2.4;  200112L,  since  glibc 2.4 to glibc 2.9; and 200809L, since
             glibc 2.10.

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

STANDARDS
       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éci-
       fiques à 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  explicite-
       ment pour utiliser les macros de test de fonctionnalités.

       Selon  quelles  macros  de test de fonctionnalités ci-dessus sont défi-
       nies, <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 ca-
       ractè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 fonc-
       tion 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 _TIME_BITS
           printf("_TIME_BITS defined: %d\n", _TIME_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

TRADUCTION
       La  traduction française de cette page de manuel a été créée par Chris-
       tophe Blaess <https://www.blaess.fr/christophe/>, Stéphan  Rafin  <ste-
       phan.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.cou-
       lon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>,  Thomas  Huriaux
       <thomas.huriaux@gmail.com>,  Nicolas François <nicolas.francois@centra-
       liens.net>, Florentin Duneau <fduneau@gmail.com>, Simon  Paillard  <si-
       mon.paillard@resel.enst-bretagne.fr>,    Denis   Barbier   <barbier@de-
       bian.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⟩.

Pages du manuel de Linux 6.03   5 février 2023          feature_test_macros(7)

Generated by dwww version 1.15 on Sat Jun 29 01:44:45 CEST 2024.