.\" -*- coding: UTF-8 -*- .\" This manpage is Copyright (C) 2006, Michael Kerrisk .\" .\" %%%LICENSE_START(VERBATIM) .\" Permission is granted to make and distribute verbatim copies of this .\" manual provided the copyright notice and this permission notice are .\" preserved on all copies. .\" .\" Permission is granted to copy and distribute modified versions of this .\" manual under the conditions for verbatim copying, provided that the .\" entire resulting derived work is distributed under the terms of a .\" permission notice identical to this one. .\" .\" Since the Linux kernel and libraries are constantly changing, this .\" manual page may be incorrect or out-of-date. The author(s) assume no .\" responsibility for errors or omissions, or for damages resulting from .\" the use of the information contained herein. The author(s) may not .\" have taken the same level of care in the production of this manual, .\" which is licensed free of charge, as they might when working .\" professionally. .\" .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. .\" %%%LICENSE_END .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH FEATURE_TEST_MACROS 7 "1 novembre 2020" Linux "Manuel du programmeur Linux" .SH NOM feature_test_macros – Macros de test de fonctionnalités .SH 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\(hytêtes système lorsqu'un programme est compilé. .PP \fBNOTE\ :\fP pour avoir un effet, une macro de test de fonctionnalités \fIdoit être définie avant d'inclure tout fichier d'en\(hytête\fP. Cela peut être accompli soit dans la ligne de commande de compilation (\fIcc\ \-DMACRO=valeur\fP), soit en définissant la macro dans le code source avant d'inclure tout en\(hytê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 \fB_GNU_SOURCE\fP peut n’avoir aucun effet parce que l’en\-tête \fI\fP lui\-même inclut \fI\fP (POSIX le permet explicitement)\ : .PP .in +4n .EX #include #define _GNU_SOURCE #include .EE .in .PP 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. .PP Les effets précis de chacune des macros décrites ci\(hydessous peuvent être vérifiés en inspectant le fichier d'en\(hytête \fI\fP. \fBRemarque\fP\ : les applications \fIn’ont pas\fP besoin d’inclure directement \fI\fP. En fait, le faire est fortement déconseillé. Consultez les NOTES. .SS "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 \fBacct\fP(2))\ : .PP .RS \fB#include \fP .PP \fBint acct(const char *\fP\fIfichier\fP\fB);\fP .PP .RS -4 .EX Exigences de macros de test de fonctionnalités pour la glibc (consultez \fBfeature_test_macros\fP(7))\ : .EE .RE .PP \fBacct\fP(): _BSD_SOURCE || (_XOPEN_SOURCE && _XOPEN_SOURCE\ <\ 500) .RE .PP Les doubles barres \fB||\fP signifient que pour obtenir la déclaration de \fBacct\fP(2) depuis \fI\fP, \fIune\fP des définitions de macros doit être utilisée avant d'inclure les fichiers d'en\-tête\ : .PP .in +4n .EX #define _BSD_SOURCE #define _XOPEN_SOURCE /* Ou toute valeur < 500 */ .EE .in .PP Autrement, des définitions équivalentes peuvent être faites lors de l'appel au compilateur\ : .PP .in +4n .EX cc \-D_BSD_SOURCE cc \-D_XOPEN_SOURCE # Ou toute valeur < 500 .EE .in .PP Veuillez noter que, comme décrit ci\-dessous, \fBcertaines macros de test de fonctionnalités sont définies par défaut\fP, et il n'est donc pas toujours nécessaire de spécifier explicitement les macros indiquées dans le SYNOPSIS. .PP Dans certains cas, les pages de manuel utilisent des raccourcis pour exprimer la nécessité de certaines macros de test (exemple tiré de \fBreadahead\fP(2))\ : .PP .RS +4 .EX \fB#define _GNU_SOURCE\fP \fB#include \fP .PP \fBssize_t readahead(int \fP\fIfd\fP\fB, off64_t *\fP\fIoffset\fP\fB, size_t \fP\fIcount\fP\fB);\fP .EE .RE .PP 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. .SS "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.\fIx\fP de Linux, \fIx\fP > 0. .PP Tout d’abord, un aperçu de quelques détails pour l’impatient\ : .IP * 3 Les macros les plus susceptibles d’être utilisées dans des codes source modernes sont \fB_POSIX_C_SOURCE\fP (pour des définitions de diverses versions de POSIX.1), \fB_XOPEN_SOURCE\fP (pour des définitions de diverses versions de SUS), \fB_GNU_SOURCE\fP (pour certaines choses spécifiques à GNU ou Linux) et \fB_DEFAULT_SOURCE\fP (pour obtenir des définitions qui normalement devrait être fournies par défaut). .IP * 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. .IP * Définir \fB_XOPEN_SOURCE\fP avec une valeur de 600 ou plus produit le même effet que définir \fB_POSIX_C_SOURCE\fP avec une valeur de 200112L ou supérieure. Lorsqu’apparaît .IP .in +4n .EX _POSIX_C_SOURCE >= 200112L .EE .in .IP 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\ : .IP .in +4n .EX _XOPEN_SOURCE >= 600 .EE .in .IP * Définir \fB_XOPEN_SOURCE\fP avec une valeur de 700 ou plus produit le même effet que définir \fB_POSIX_C_SOURCE\fP avec une valeur de 200809L ou supérieure. Lorsqu’apparaît .IP .in +4n .EX _POSIX_C_SOURCE >= 200809L .EE .in .IP 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\ : .IP .in +4n .EX _XOPEN_SOURCE >= 700 .EE .in .\" The details in glibc 2.0 are simpler, but combining a .\" a description of them with the details in later glibc versions .\" would make for a complicated description. .PP La glibc de Linux comprend les macros de test de fonctionnalités suivantes\ : .TP \fB__STRICT_ANSI__\fP Norme C ISO. Cette macro est définie implicitement par \fBgcc\fP(1) lors des appels avec, par exemple, l'indicateur \fI\-std=c99\fP ou \fI\-ansi\fP. .TP \fB_POSIX_C_SOURCE\fP Si cette macro est définie, les en\-têtes exposent les définitions suivantes\ : .RS .IP \(bu 3 La valeur\ 1 expose les définitions conformes à POSIX.1\-1990 et C\ ISO (1990). .IP \(bu Les valeurs supérieures ou égales à 2 exposent en plus les définitions de POSIX.2\-1992. .IP \(bu .\" 199506L functionality is available only since glibc 2.1 Les valeurs supérieures ou égales à 199309L exposent en plus les définitions de POSIX.1b (extensions temps\-réel). .IP \(bu Les valeurs supérieures ou égales à 199506L exposent en plus les définitions de POSIX.1c (threads). .IP \(bu (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 \fB_ISOC99_SOURCE\fP. .IP \(bu (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). .RE .TP \fB_POSIX_SOURCE\fP Définir cette macro obsolète (quelle que soit sa valeur) est équivalent à définir \fB_POSIX_C_SOURCE\fP à la valeur\ 1. .IP 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. .TP \fB_XOPEN_SOURCE\fP Si cette macro est définie, les en\-têtes exposent les définitions suivantes\ : .RS .IP \(bu 3 Si elle est définie, quelle que soit sa valeur, les définitions de POSIX.1, POSIX.2 et XPG4 sont exposées. .IP \(bu Les valeurs supérieures ou égales à 500 exposent les définitions de SUSv2 (UNIX\ 98). .IP \(bu (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. .IP \(bu (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). .RE .IP Si \fB__STRICT_ANSI__\fP n'est pas définie, ou si \fB_XOPEN_SOURCE\fP est définie avec une valeur supérieure ou égale à 500 \fIet\fP que ni \fB_POSIX_SOURCE\fP ni \fB_POSIX_C_SOURCE\fP ne sont explicitement définies, alors les macros suivantes sont implicitement définies\ : .RS .IP \(bu 3 \fB_POSIX_SOURCE\fP est définie à la valeur\ 1. .IP \(bu \fB_POSIX_SOURCE\fP est définie d'après la valeur de \fB_XOPEN_SOURCE\fP\ : .RS .TP \fB_XOPEN_SOURCE\fP < 500 \fB_POSIX_C_SOURCE\fP est définie à la valeur\ 2. .TP 500 <= \fB_XOPEN_SOURCE\fP < 600 \fB_POSIX_C_SOURCE\fP est définie à la valeur\ 199506L. .TP 600 <= \fB_XOPEN_SOURCE\fP < 700 \fB_POSIX_C_SOURCE\fP est définie à la valeur\ 200112L. .TP 700 <= \fB_XOPEN_SOURCE\fP (depuis la glibc\ 2.10) \fB_POSIX_C_SOURCE\fP est définie à la valeur\ 200809L. .RE .RE .IP De plus, définir \fB_XOPEN_SOURCE\fP avec une valeur de 500 ou supérieure produit le même effet que définir \fB_XOPEN_SOURCE_EXTENDED\fP. .TP \fB_XOPEN_SOURCE_EXTENDED\fP Si cette macro \fIet\fP \fB_XOPEN_SOURCE\fP sont définies, exposer les définitions correspondant aux extensions XPG4v2 (SUSv1) d'UNIX (UNIX\ 95). Définir \fB_XOPEN_SOURCE\fP avec une valeur de 500 ou supérieure produit aussi le même effet que définir \fB_XOPEN_SOURCE_EXTENDED\fP. L’utilisation de \fB_XOPEN_SOURCE_EXTENDED\fP dans un nouveau code source est à éviter. .IP Puisque définir \fB_XOPEN_SOURCE\fP avec une valeur de 500 ou supérieure produit aussi le même effet que définir \fB_XOPEN_SOURCE_EXTENDED\fP, 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. .TP \fB_ISOC99_SOURCE\fP (depuis la glibc\ 2.1.3) Exposer des déclarations cohérentes avec la norme ISO\ C99. .IP Les versions antérieures de la glibc\ 2.1.x reconnaissaient une macro équivalente appelée \fB_ISOC9X_SOURCE\fP (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. .IP Si \fB_ISOC99_SOURCE\fP 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. .IP Invoquer le compilateur\ C avec l’option \fI\-std=c99\fP produit le même effet que définir cette macro. .TP \fB_ISOC11_SOURCE\fP (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 \fB_ISOC99_SOURCE\fP). .IP Invoquer le compilateur\ C avec l’option \fI\-std=c11\fP produit le même effet que définir cette macro. .TP \fB_LARGEFILE64_SOURCE\fP 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 à .UR http:\:/\:/opengroup.org\:/platform\:/lfs.html .UE . 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 \fIoff64_t\fP pour \fIoff_t\fP, \fBlseek64\fP() pour \fBlseek\fP(), etc.). Les nouveaux programmes ne devraient pas utiliser cette macro\ ; à la place, \fI_FILE_OFFSET_BITS=64\fP devrait être utilisée. .TP \fB_LARGEFILE_SOURCE\fP Cette macro a historiquement été utilisée pour exposer certaines fonctions (en particulier \fBfseeko\fP() et \fBftello\fP()) qui contournent les limites d’interfaces de programmation précédentes (\fBfeek\fP() et \fBftell\fP()) qui utilisent \fIlong\fP pour les positions de fichier. Cette macro est implicitement définie si \fB_XOPEN_SOURCE\fP est définie avec une valeur supérieure ou égale à 500. Les nouveaux programmes ne devraient pas utiliser cette macro. Définir \fB_XOPEN_SOURCE\fP comme cela vient d’être décrit ou définir \fB_FILE_OFFSET_BITS\fP à la valeur 64 sont les mécanismes préférés pour obtenir le même résultat. .TP \fB_FILE_OFFSET_BITS\fP 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. .IP 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. .TP \fB_BSD_SOURCE\fP (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. .IP 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 \fB_SVID_SOURCE\fP, \fB_POSIX_SOURCE\fP, \fB_POSIX_C_SOURCE\fP, \fB_XOPEN_SOURCE\fP, \fB_XOPEN_SOURCE_EXTENDED\fP ou \fB_GNU_SOURCE\fP est définie, auquel cas les définitions BSD sont défavorisées. Depuis la glibc\ 2.19, \fB_BSD_SOURCE\fP ne force plus la préférence des définitions BSD en cas de conflit. .IP .\" commit c941736c92fa3a319221f65f6755659b2a5e0a20 .\" commit 498afc54dfee41d33ba519f496e96480badace8e .\" commit acd7f096d79c181866d56d4aaf3b043e741f1e2c .\" commit ade40b10ff5fa59a318cf55b9d8414b758e8df78 Depuis la glibc\ 2.20, cette macro est obsolète. Sa définition a le même effet que la définition de \fB_DEFAULT_SOURCE\fP, mais génère un avertissement de compilation (à moins que \fB_DEFAULT_SOURCE\fP soit également définie). Utilisez \fB_DEFAULT_SOURCE\fP à la place. Pour permettre au code nécessitant \fB_BSD_SOURCE\fP dans glibc\ 2.19 et versions antérieures, et \fB_DEFAULT_SOURCE\fP dans glibc\ 2.20 et version suivantes, de compiler sans avertissement, définissez \fIà la fois\fP \fB_BSD_SOURCE\fP et \fB_DEFAULT_SOURCE\fP. .TP \fB_SVID_SOURCE\fP (obsolète depuis la glibc\ 2.20) Si cette macro est définie (quelle que soit sa valeur), les en\(hytêtes exposent les définitions héritées de System\ V. (SVID == System\ V Interface Definition\ ; consultez \fBstandards\fP(7).) .IP Depuis la glibc\ 2.20, cette macro est obsolète de la même manière que \fB_BSD_SOURCE\fP. .TP \fB_DEFAULT_SOURCE\fP (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 \fIcc\ \-std=c99\fP). Définir \fB_DEFAULT_SOURCE\fP n'a aucun effet sans définir d'autres macros individuelles ou invoquer le compilateur dans un de ses modes «\ normalisés\ ». .IP 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\ : .IP cc \-D_BSD_SOURCE \-D_SVID_SOURCE \-D_POSIX_C_SOURCE=200809 .TP \fB_ATFILE_SOURCE\fP (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 \fBopenat\fP(2). Depuis glibc\ 2.10, cette macro est aussi définie de manière implicite si \fB_POSIX_C_SOURCE\fP est définie avec une valeur supérieure ou égale à 200809L. .TP \fB_GNU_SOURCE\fP Définir cette macro (avec n'importe quelle valeur) définit implicitement \fB_ATFILE_SOURCE\fP, \fB_LARGEFILE64_SOURCE\fP, \fB_ISOC99_SOURCE\fP, \fB_XOPEN_SOURCE_EXTENDED\fP, \fB_POSIX_SOURCE\fP, \fB_POSIX_C_SOURCE\fP 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 \fB_XOPEN_SOURCE\fP 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. .IP Depuis la glibc 2.19, définir \fB_GNU_SOURCE\fP provoque la définition implicite de \fB_DEFAULT_SOURCE\fP. Dans les versions antérieures à\ 2.20, définir \fB_GNU_SOURCE\fP provoque la définition implicite de \fB_BSD_SOURCE\fP et \fB_SVID_SOURCE\fP. .TP \fB_REENTRANT\fP .\" Zack Weinberg .\" There did once exist C libraries where it was necessary. The ones .\" I remember were proprietary Unix vendor libcs from the mid-1990s .\" You would get completely unlocked stdio without _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. .IP 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 \fB_REENTRANT\fP est d’activer une ou deux des mêmes déclarations qui sont activées en définissant \fB_POSIX_C_SOURCE\fP avec une valeur 199606L ou supérieure. .IP \fB_REENTRANT\fP est désormais obsolète. Dans la glibc\ 2.25 et les versions postérieures, définir \fB_REENTRANT\fP est équivalent à définir \fB_POSIX_C_SOURCE\fP avec comme valeur 199606L. Si un niveau de conformité POSIX supérieur est sélectionné par n’importe quel autre moyen (tel que \fB_POSIX_C_SOURCE\fP lui\-même, \fB_XOPEN_SOURCE\fP, \fB_DEFAULT_SOURCE\fP ou \fB_GNU_SOURCE\fP), puis définir \fB_REENTRANT\fP n’a aucun effet. .IP Cette macro est automatiquement définie si la compilation est faite avec \fIcc\ \-pthread\fP. .TP \fB_THREAD_SAFE\fP Synonyme de \fB_REENTRANT\fP (obsolète), fourni pour la compatibilité avec d'autres implémentations. .TP \fB_FORTIFY_SOURCE\fP (depuis la glibc\ 2.3.4) .\" For more detail, see: .\" http://gcc.gnu.org/ml/gcc-patches/2004-09/msg02055.html .\" [PATCH] Object size checking to prevent (some) buffer overflows .\" * From: Jakub Jelinek .\" * To: gcc-patches at gcc dot gnu dot org .\" * Date: Tue, 21 Sep 2004 04:16:40 -0400 .\" Look for __USE_FORTIFY_LEVEL in the header files 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, \fBmemcpy\fP(3), \fBmemset\fP(3), \fBstpcpy\fP(3), \fBstrcpy\fP(3), \fBstrncpy\fP(3), \fBstrcat\fP(3), \fBstrncat\fP(3), \fBsprintf\fP(3), \fBsnprintf\fP(3), \fBvsprintf\fP(3), \fBvsnprintf\fP(3), \fBgets\fP(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 \fImode\fP soit fourni à \fBopen\fP(2) quand les indicateurs indiqués incluent \fBO_CREAT\fP. Tous les problèmes ne sont pas détectés, seulement quelques cas courants. .IP .\" For example, given the following code .\" int d; .\" char buf[1000], buf[1000]; .\" strcpy(fmt, "Hello world\n%n"); .\" snprintf(buf, sizeof(buf), fmt, &d); .\" .\" Compiling with "gcc -D_FORTIFY_SOURCE=2 -O1" and then running will .\" cause the following diagnostic at run time at the snprintf() call .\" .\" *** %n in writable segment detected *** .\" Aborted (core dumped) .\" Si \fB_FORTIFY_SOURCE\fP est défini à 1, avec un niveau\ 1 d'optimisation de compilateur (\fIgcc\ \-O1\fP) ou supérieur, des vérifications sans influence sur le comportement de programmes conformes sont faites. Avec \fB_FORTIFY_SOURCE\fP défini à\ 2, des vérifications supplémentaires sont ajoutées, mais certains programmes conformes peuvent échouer. .IP 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. .IP L'utilisation de cette macro nécessite une gestion par le compilateur, qui est disponible dans \fBgcc\fP(1) depuis la version\ 4.0. .SS "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\ : \fB_BSD_SOURCE\fP (dans la glibc\ 2.19 et avant), \fB_SVID_SOURCE\fP (dans la glibc\ 2.19 et avant), \fB_DEFAULT_SOURCE\fP (depuis la glibc\ 2.19), \fB_POSIX_SOURCE\fP et \fB_POSIX_C_SOURCE\fP=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). .PP Si une des macros \fB__STRICT_ANSI__\fP, \fB_ISOC99_SOURCE\fP, \fB_ISOC11_SOURCE\fP (depuis la glibc\ 2.18) \fB_POSIX_SOURCE\fP, \fB_POSIX_C_SOURCE\fP, \fB_XOPEN_SOURCE\fP, \fB_XOPEN_SOURCE_EXTENDED\fP (dans la glibc\ 2.11 et avant), \fB_BSD_SOURCE\fP (dans la glibc\ 2.19 et avant) ou \fB_SVID_SOURCE\fP (dans la glibc\ 2.19 et avant) est définie explicitement, alors \fB_BSD_SOURCE\fP, \fB_SVID_SOURCE\fP et \fB_DEFAULT_SOURCE\fP ne sont pas définies par défaut. .PP Si ni \fB_POSIX_SOURCE\fP ni \fB_POSIX_C_SOURCE\fP ne sont définies explicitement et que soit \fB__STRICT_ANSI__\fP n'est pas définie soit \fB_XOPEN_SOURCE\fP est définie à une valeur supérieure ou égale à 500, alors .IP * 3 \fB_POSIX_SOURCE\fP est définie à la valeur\ 1 .IP * \fB_POSIX_C_SOURCE\fP est définie avec une des valeurs suivantes\ : .RS 3 .IP \(bu 3 2, si \fB_XOPEN_SOURCE\fP est définie avec une valeur inférieure à 500\ ; .IP \(bu 199506L, si \fB_XOPEN_SOURCE\fP est définie à une valeur supérieure ou égale à 500 et inférieure à 600, ou .IP \(bu 200112L (depuis la glibc\ 2.4), si \fB_XOPEN_SOURCE\fP est définie à une valeur supérieure ou égale à 600 et inférieure à 700\ ; .IP \(bu 200809L (depuis la glibc\ 2.10), si \fB_XOPEN_SOURCE\fP est définie à une valeur supérieure ou égale à 700. .IP \(bu Les versions plus anciennes de la glibc ne connaissent pas les valeurs 200112L et 200809L pour \fB_POSIX_C_SOURCE\fP et la configuration de cette macro dépendra de la version de la glibc. .IP \(bu Si \fB_XOPEN_SOURCE\fP n'est pas défini, alors la configuration de \fB_POSIX_C_SOURCE\fP 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. .RE .PP Plusieurs macros peuvent être définies, les résultats sont additifs. .SH CONFORMITÉ POSIX.1 spécifie \fB_POSIX_C_SOURCE\fP, \fB_POSIX_SOURCE\fP et \fB_XOPEN_SOURCE\fP. .PP \fB_XOPEN_SOURCE_EXTENDED\fP était spécifiée par XPG4v2 (c’est\-à\-dire SUSv1), mais n’est pas présente dans SUSv2 et les versions suivantes. \fB_FILE_OFFSET_BITS\fP n’est spécifiée par aucune norme, mais est employée dans quelques autres implémentations. .PP \fB_BSD_SOURCE\fP, \fB_SVID_SOURCE\fP, \fB_DEFAULT_SOURCE\fP, \fB_ATFILE_SOURCE\fP, \fB_GNU_SOURCE\fP, \fB_FORTIFY_SOURCE\fP, \fB_REENTRANT\fP et \fB_THREAD_SAFE\fP sont spécifiques à Linux (glibc). .SH NOTES \fI\fP est un fichier d'en\(hytê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\(hytêtes si nécessaire\ : il n'est pas nécessaire de l'inclure explicitement pour utiliser les macros de test de fonctionnalités. .PP Selon quelles macros de test de fonctionnalités ci\(hydessus sont définies, \fI\fP définit diverses autres macros qui sont testées par les en\(hytêtes de la glibc. Ces macros ont des noms préfixés par deux caractères de soulignement (par exemple \fB__USE_MISC\fP). Les programmes ne doivent \fIjamais\fP définir ces macros directement\ ; ils doivent utiliser les macros de test de fonctionnalités de la liste précédente. .SH 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\ : .PP .in +4n .EX $ \fBcc ftm.c\fP $ \fB./a.out\fP _POSIX_SOURCE defined _POSIX_C_SOURCE defined: 200809L _BSD_SOURCE defined _SVID_SOURCE defined _ATFILE_SOURCE defined $ \fBcc \-D_XOPEN_SOURCE=500 ftm.c\fP $ \fB./a.out\fP _POSIX_SOURCE defined _POSIX_C_SOURCE defined: 199506L _XOPEN_SOURCE defined: 500 $ \fBcc \-D_GNU_SOURCE ftm.c\fP $ \fB./a.out\fP _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 .EE .in .SS "Source du programme" \& .EX /* ftm.c */ #include #include #include #include int main(int argc, char *argv[]) { #ifdef _POSIX_SOURCE printf("_POSIX_SOURCE defined\en"); #endif #ifdef _POSIX_C_SOURCE printf("_POSIX_C_SOURCE defined: %jdL\en", (intmax_t) _POSIX_C_SOURCE); #endif #ifdef _ISOC99_SOURCE printf("_ISOC99_SOURCE defined\en"); #endif #ifdef _ISOC11_SOURCE printf("_ISOC11_SOURCE defined\en"); #endif #ifdef _XOPEN_SOURCE printf("_XOPEN_SOURCE defined: %d\en", _XOPEN_SOURCE); #endif #ifdef _XOPEN_SOURCE_EXTENDED printf("_XOPEN_SOURCE_EXTENDED defined\en"); #endif #ifdef _LARGEFILE64_SOURCE printf("_LARGEFILE64_SOURCE defined\en"); #endif #ifdef _FILE_OFFSET_BITS printf("_FILE_OFFSET_BITS defined: %d\en", _FILE_OFFSET_BITS); #endif #ifdef _BSD_SOURCE printf("_BSD_SOURCE defined\en"); #endif #ifdef _SVID_SOURCE printf("_SVID_SOURCE defined\en"); #endif #ifdef _DEFAULT_SOURCE printf("_DEFAULT_SOURCE defined\en"); #endif #ifdef _ATFILE_SOURCE printf("_ATFILE_SOURCE defined\en"); #endif #ifdef _GNU_SOURCE printf("_GNU_SOURCE defined\en"); #endif #ifdef _REENTRANT printf("_REENTRANT defined\en"); #endif #ifdef _THREAD_SAFE printf("_THREAD_SAFE defined\en"); #endif #ifdef _FORTIFY_SOURCE printf("_FORTIFY_SOURCE defined\en"); #endif exit(EXIT_SUCCESS); } .EE .SH "VOIR AUSSI" \fBlibc\fP(7), \fBstandards\fP(7), \fBsystem_data_types\fP(7) .PP .\" But beware: the info libc document is out of date (Jul 07, mtk) La section «\ Feature Test Macros\ » de \fIinfo libc\fP. .PP \fI/usr/include/features.h\fP .SH COLOPHON Cette page fait partie de la publication\ 5.10 du projet \fIman\-pages\fP 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/. .PP .SH TRADUCTION La traduction française de cette page de manuel a été créée par Christophe Blaess , Stéphan Rafin , Thierry Vignaud , François Micaux, Alain Portal , Jean-Philippe Guérard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas François , Florentin Duneau , Simon Paillard , Denis Barbier , David Prévot et Jean-Paul Guillonneau . .PP Cette traduction est une documentation libre ; veuillez vous reporter à la .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License version 3 .UE concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE. .PP Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à .MT debian-l10n-french@lists.debian.org .ME .