Provided by: manpages-fr_4.28.0-2_all 

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 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é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 de dé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.
Pages du manuel de Linux 6.9.1 15 juin 2024 feature_test_macros(7)