Man page - feature_test_macros(7)

Packages contains this manual

Available languages:

en fr ja ru de

Manual

feature_test_macros

NOM
DESCRIPTION
Spécification des exigences de macro de test de fonctionnalités dans lespages de manuel
Macros de test de fonctionnalités comprises par la glibc
Définitions par défaut, définitions implicites et combinaison dedéfinitions
STANDARDS
HISTORIQUE
NOTES
EXEMPLES
Source du programme
VOIR AUSSI
TRADUCTION

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 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. 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> . Remarque : les applications n’ont pas besoin d’inclure directement <features.h> . En fait, le faire est fortement dĂ©conseillĂ©. Consultez les NOTES.

Spécification des exigences de macro de test de fonctionnalités dans lespages 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Ă©ralement une note de la forme suivante (exemple pris dans la page de manuel 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 utilisĂ©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 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
#define _FILE_OFFSET_BITS 64
#include <fcntl.h>

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

This format is employed when the feature test macros ensure that the proper function declarations are visible, and the macros are not defined by default.

Macros de test de fonctionnalités comprises par la glibc

Les paragraphes suivants expliquent comment les macros de test de fonctionnalité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 diverses versions de POSIX.1), _XOPEN_SOURCE (pour des dĂ©finitions de diverses versions de SUS), _GNU_SOURCE (pour certaines choses spĂ©cifiques Ă  GNU ou Linux) et _DEFAULT_SOURCE (pour obtenir des dĂ©finitions 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 supĂ©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 supĂ©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

La glibc comprend les macros de test de fonctionnalités suivantes :
__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Ă©finitions 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Ă©ralement 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Ă©finitions suivantes :

-

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

-

Les valeurs supérieures ou égales à 500 exposent les définitions 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Ă©cification 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 _POSIX_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 _XOPEN_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Ă©finitions 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_EXTENDED . 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_EXTENDED , cette derniĂšre (obsolĂšte) macro de test de fonctionnalitĂ©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 amendement 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 fonctions 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 programmes ne devraient pas utiliser cette macro. DĂ©finir _XOPEN_SOURCE comme cela vient d’ĂȘtre dĂ©crit ou dĂ©finir _FILE_OFFSET_BITS Ă  la valeur 64 sont les mĂ©canismes prĂ©fĂ©rĂ©s pour obtenir le mĂȘme rĂ©sultat.

_FILE_OFFSET_BITS

Defining this macro with the value 64 automatically converts references to 32-bit functions and data types related to file I/O and filesystem operations into references to their 64-bit counterparts. This is useful for performing I/O on large files (> 2 Gigabytes) on 32-bit systems. It is also useful when calling functions like copy_file_range (2) that were added more recently and that come only in 64-bit flavors. (Defining this macro permits correctly written programs to use large files with only a recompilation being required.)

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

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 maniĂšre que _BSD_SOURCE .

_DEFAULT_SOURCE (depuis la glibc 2.19)

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 ). DĂ©finir _DEFAULT_SOURCE n’a aucun effet sans dĂ©finir d’autres macros individuelles ou invoquer le compilateur dans un de ses modes « normalisĂ©s ».

Les définitions par « défaut » incluent celles requises par POSIX.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 explicite 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 _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) dĂ©finit implicitement _ATFILE_SOURCE , _LARGEFILE64_SOURCE , _ISOC99_SOURCE , _XOPEN_SOURCE_EXTENDED , _POSIX_SOURCE , _POSIX_C_SOURCE avec la valeur 200809L (200112L avant la glibc 2.10, 199506L avant la glibc 2.5, 199309L glibc 2.1) et _XOPEN_SOURCE avec la valeur 700 (600 la glibc 2.10, 500 avant la glibc 2.2). De plus, de nombreuses extensions spĂ©cifiques GNU sont exposĂ©es.

Depuis la glibc 2.19, définir _GNU_SOURCE provoque la définition implicite de _DEFAULT_SOURCE . Avant la glibc 2.20, définir _GNU_SOURCE provoque la définition implicite de _BSD_SOURCE et _SVID_SOURCE .

_REENTRANT

Historiquement, dans diverses bibliothĂšques C il Ă©tait nĂ©cessaire de dĂ©finir cette macro dans tous les codes multithread (cela peut ĂȘtre encore nĂ©cessaire dans quelques bibliothĂšques C). Dans la glibc, cette macro expose aussi des dĂ©finitions de certaines fonctions rĂ©entrantes.

Cependant, la glibc est thread-safe par dĂ©faut depuis de nombreuses 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Ă©finir _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 aucun effet.

Cette macro est automatiquement définie si la compilation est faite avec 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 manipulation de mĂ©moire (par exemple, memcpy (3), memset (3), stpcpy (3), strcpy (3), strncpy (3), strcat (3), strncat (3), sprintf (3), snprintf (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Ă©rification 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’optimisation 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 supplĂ©mentaires sont ajoutĂ©es, mais certains programmes conformes peuvent Ă©chouer.

Certaines vĂ©rifications peuvent ĂȘtre effectuĂ©es lors de la compilation (Ă  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 erreur 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 variable can now be fortified.

Use of this macro requires compiler support, available since gcc 4.0 and clang 2.6. Use of _FORTIFY_SOURCE set to 3 requires gcc 12.0 or later, or clang 9.0 or later, in conjunction with glibc 2.33 or later.

Définitions par défaut, définitions implicites et combinaison dedéfinitions

Si aucune macro de test de fonctionnalitĂ©s n’est dĂ©finie explicitement, alors les macros de test suivantes sont dĂ©finies par dĂ©faut : _BSD_SOURCE (dans la glibc 2.19 et avant), _SVID_SOURCE (dans la glibc 2.19 et avant), _DEFAULT_SOURCE (depuis la glibc 2.19), _POSIX_SOURCE et _POSIX_C_SOURCE =200809L (200112L avant la glibc 2.10, 199506L avant la glibc 2.4, 199309L avant la glibc 2.1).

Si une des macros __STRICT_ANSI__ , _ISOC99_SOURCE , _ISOC11_SOURCE (depuis la glibc 2.18) _POSIX_SOURCE , _POSIX_C_SOURCE , _XOPEN_SOURCE , _XOPEN_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 _DEFAULT_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 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 avant la glibc 2.4, 200112L de la glibc 2.4 Ă  la glibc 2.9 et 200809L depuis la 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 .

_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écifiques à la glibc.

HISTORIQUE

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

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Ă©s.

Selon quelles macros de test de fonctionnalitĂ©s 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 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 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 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 Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.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.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.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 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 .