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 de Linux, 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 de Linux 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
- 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.
- _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 dans les versions de la glibc antérieures à 2.10,
199506L dans les versions de la glibc antérieures à 2.5,
199309L dans les versions de la glibc antérieures à 2.1) et
_XOPEN_SOURCE avec la valeur 700 (600 dans les versions de
la glibc antérieures à 2.10, 500 dans les versions de la
glibc antérieures à 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. Dans les versions
antérieures à 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.
- L'utilisation de cette macro nécessite une gestion par le
compilateur, qui est disponible dans gcc(1) depuis la
version 4.0.
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 dans les
versions de la glibc antérieures à 2.10, 199506L dans les
versions de la glibc antérieures à 2.4, 199309L dans les
versions de la glibc antérieures à 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 pour les versions de la glibc antérieures à 2.4,
200112L pour les glibc 2.4 à 2.9 et 200809L depuis la
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 _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);
}
Cette page fait partie de la publication 5.10 du projet
man-pages Linux. Une description du projet et des instructions pour
signaler des anomalies et la dernière version de cette page peuvent
être trouvées à l'adresse
https://www.kernel.org/doc/man-pages/.
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.