feature_test_macros – Macros de test de
fonctionnalités
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.
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);
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
#include <fcntl.h>
ssize_t readahead(int fd, off64_t *offset, size_t count);
Ce format est utilisé dans les cas où seule une
macro de test de fonctionnalités peut être utilisée
pour exposer la déclaration de la fonction et quand cette macro n'est
pas définie par défaut.
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
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é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
- Définir cette macro à la valeur 64 convertit
automatiquement les références aux fonctions et types de
données 32 bits liés aux E/S sur les fichiers et aux
opérations sur le système de fichiers en
références à leurs équivalents 64 bits.
C'est utile pour les E/S sur des gros fichiers (> 2 gigaoctets)
sur les systèmes 32 bits. Cette macro permet aux programmes
correctement écrits d'utiliser de gros fichiers avec seulement une
recompilation.
- Les systèmes 64 bits permettent d'office d'utiliser des
fichiers de taille supérieure à 2 gigaoctets, et sur
ces systè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)
- This macro can be defined to ensure that the "default"
definitions are provided even when the defaults would otherwise be
disabled, as happens when individual macros are explicitly defined, 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 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
- Defining this macro (with any value) implicitly defines
_ATFILE_SOURCE, _LARGEFILE64_SOURCE, _ISOC99_SOURCE,
_XOPEN_SOURCE_EXTENDED, _POSIX_SOURCE,
_POSIX_C_SOURCE with the value 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é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.
- 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 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 with gcc(1)
since glibc 4.0.
- Use of _FORTIFY_SOURCE set to 3 requires gcc(1) version 12.0
or later.
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 (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.
- •
- If _XOPEN_SOURCE is undefined, then the setting of
_POSIX_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.
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écifiques à
Linux (glibc).
<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.
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
/* 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);
}
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.