feature_test_macros(7) Miscellaneous Information Manual NOM feature_test_macros - Macros de test de fonctionnalites DESCRIPTION Les macros de test de fonctionnalites permettent au programmeur de controler quelles definitions sont exposees par les fichiers d'en-tetes systeme lorsqu'un programme est compile. NOTE : pour avoir un effet, une macro de test de fonctionnalites doit etre definie avant d'inclure tout fichier d'en-tete. Cela peut etre accompli soit dans la ligne de commande de compilation (cc -DMACRO=valeur), soit en definissant la macro dans le code source avant d'inclure tout en-tete. L'exigence que la macro soit definie avant d'inclure n'importe quel fichier d'en-tete existe parce que les fichiers d'en-tete peuvent librement s'inclure mutuellement. Donc, par exemple, dans les lignes suivantes, definir la macro _GNU_SOURCE peut n'avoir aucun effet parce que l'en-tete lui-meme inclut (POSIX le permet explicitement) : #include #define _GNU_SOURCE #include Certaines macros de test de fonctionnalites sont utiles pour creer des applications portables, en empechant des definitions non normalisees d'etre exposees. D'autres macros peuvent etre utilisees pour exposer des definitions non normalisees qui ne sont pas exposees par defaut. Les effets precis de chacune des macros decrites ci-dessous peuvent etre verifies en inspectant le fichier d'en-tete . Remarque : les applications n'ont pas besoin d'inclure directement . En fait, le faire est fortement deconseille. Consultez les NOTES. Specification des exigences de macro de test de fonctionnalites dans les pages de manuel Quand une fonction necessite qu'une macro de test de fonctionnalites soit definie, la section SYNOPSIS de la page de manuel comprend generalement une note de la forme suivante (exemple pris dans la page de manuel acct(2)) : #include int acct(const char *fichier); Exigences de macros de test de fonctionnalites pour la glibc (consultez feature_test_macros(7)) : acct() : _BSD_SOURCE || (_XOPEN_SOURCE && _XOPEN_SOURCE < 500) Les doubles barres || signifient que pour obtenir la declaration de acct(2) depuis , une des definitions de macros doit etre utilisee avant d'inclure les fichiers d'en-tete : #define _BSD_SOURCE #define _XOPEN_SOURCE /* Ou toute valeur < 500 */ Autrement, des definitions equivalentes peuvent etre faites lors de l'appel au compilateur : cc -D_BSD_SOURCE cc -D_XOPEN_SOURCE # Ou toute valeur < 500 Veuillez noter que, comme decrit ci-dessous, certaines macros de test de fonctionnalites sont definies par defaut, et il n'est donc pas toujours necessaire de specifier explicitement les macros indiquees dans le SYNOPSIS. Dans certains cas, les pages de manuel utilisent des raccourcis pour exprimer la necessite de certaines macros de test (exemple tire de readahead(2)) : #define _GNU_SOURCE #define _FILE_OFFSET_BITS 64 #include 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 fonctionnalites comprises par la glibc Les paragraphes suivants expliquent comment les macros de test de fonctionnalites sont gerees dans les glibc 2.x, x > 0. Tout d'abord, un apercu de quelques details pour l'impatient : - Les macros les plus susceptibles d'etre utilisees dans des codes source modernes sont _POSIX_C_SOURCE (pour des definitions de diverses versions de POSIX.1), _XOPEN_SOURCE (pour des definitions de diverses versions de SUS), _GNU_SOURCE (pour certaines choses specifiques a GNU ou Linux) et _DEFAULT_SOURCE (pour obtenir des definitions qui normalement devrait etre fournies par defaut). - Certaines macros sont definies avec des valeurs par defaut. Par consequent, meme si une ou plusieurs macros sont indiquees comme necessaires dans le SYNOPSIS d'une page de manuel, il peut ne pas etre necessaire de les definir explicitement. Tous les details sur les valeurs par defaut sont donnes ci-apres dans cette page de manuel. - Definir _XOPEN_SOURCE avec une valeur de 600 ou plus produit le meme effet que definir _POSIX_C_SOURCE avec une valeur de 200112L ou superieure. Lorsqu'apparait _POSIX_C_SOURCE >= 200112L dans les necessites des macros de test de fonctionnalites dans le SYNOPSIS d'une page de manuel, il est implicite que ce qui suit a le meme effet : _XOPEN_SOURCE >= 600 - Definir _XOPEN_SOURCE avec une valeur de 700 ou plus produit le meme effet que definir _POSIX_C_SOURCE avec une valeur de 200809L ou superieure. Lorsqu'apparait _POSIX_C_SOURCE >= 200809L dans les necessites des macros de test de fonctionnalites dans le SYNOPSIS d'une page de manuel, il est implicite que ce qui suit a le meme effet : _XOPEN_SOURCE >= 700 glibc understands the following feature test macros: __STRICT_ANSI__ Norme C ISO. Cette macro est definie implicitement par gcc(1) lors des appels avec, par exemple, l'indicateur -std=c99 ou -ansi. _POSIX_C_SOURCE Si cette macro est definie, les en-tetes exposent les definitions suivantes : - La valeur 1 expose les definitions conformes a POSIX.1-1990 et C ISO (1990). - Les valeurs superieures ou egales a 2 exposent en plus les definitions de POSIX.2-1992. - Les valeurs superieures ou egales a 199309L exposent en plus les definitions de POSIX.1b (extensions temps-reel). - Les valeurs superieures ou egales a 199506L exposent en plus les definitions de POSIX.1c (threads). - (Depuis la glibc 2.3.3) Les valeurs superieures ou egales a 200112L exposent de plus les definitions correspondantes a la specification de base POSIX.1-2001 (sans l'extension XSI) et activent egalement les fonctionnalites C95 (depuis la glibc 2.12) et C99 (depuis la glibc 2.10) -- en d'autres mots, l'equivalent de definir _ISOC99_SOURCE. - (Depuis la glibc 2.10) Les valeurs superieures ou egales a 200809L exposent de plus les definitions correspondantes a la specification de base POSIX.1-2008 (sans l'extension XSI). _POSIX_SOURCE Definir cette macro obsolete (quelle que soit sa valeur) est equivalent a definir _POSIX_C_SOURCE a la valeur 1. Puisque cette macro est obsolete, son utilisation n'est generalement pas documentee lors de l'explication des necessites de macros de test de fonctionnalites dans les pages de manuel. _XOPEN_SOURCE Si cette macro est definie, les en-tetes exposent les definitions suivantes : - Si elle est definie, quelle que soit sa valeur, les definitions de POSIX.1, POSIX.2 et XPG4 sont exposees. - Les valeurs superieures ou egales a 500 exposent les definitions de SUSv2 (UNIX 98). - (Depuis la glibc 2.2) Les valeurs superieures ou egales a 600 exposent les definitions de SUSv3 (UNIX 03, c'est-a-dire la specification de base POSIX.1-2001 plus l'extension XSI) et de C99. - (Depuis la glibc 2.10) Les valeurs superieures ou egales a 700 exposent les definitions de SUSv4 (c'est-a-dire la specification de base POSIX.1-2008 plus l'extension XSI). Si __STRICT_ANSI__ n'est pas definie, ou si _XOPEN_SOURCE est definie avec une valeur superieure ou egale a 500 et que ni _POSIX_SOURCE ni _POSIX_C_SOURCE ne sont explicitement definies, alors les macros suivantes sont implicitement definies : - _POSIX_SOURCE est definie a la valeur 1. - _POSIX_SOURCE est definie d'apres la valeur de _XOPEN_SOURCE : _XOPEN_SOURCE < 500 _POSIX_C_SOURCE est definie a la valeur 2. 500 <= _XOPEN_SOURCE < 600 _POSIX_C_SOURCE est definie a la valeur 199506L. 600 <= _XOPEN_SOURCE < 700 _POSIX_C_SOURCE est definie a la valeur 200112L. 700 <= _XOPEN_SOURCE (depuis la glibc 2.10) _POSIX_C_SOURCE est definie a la valeur 200809L. De plus, definir _XOPEN_SOURCE avec une valeur de 500 ou superieure produit le meme effet que definir _XOPEN_SOURCE_EXTENDED. _XOPEN_SOURCE_EXTENDED Si cette macro et _XOPEN_SOURCE sont definies, exposer les definitions correspondant aux extensions XPG4v2 (SUSv1) d'UNIX (UNIX 95). Definir _XOPEN_SOURCE avec une valeur de 500 ou superieure produit aussi le meme effet que definir _XOPEN_SOURCE_EXTENDED. L'utilisation de _XOPEN_SOURCE_EXTENDED dans un nouveau code source est a eviter. Puisque definir _XOPEN_SOURCE avec une valeur de 500 ou superieure produit aussi le meme effet que definir _XOPEN_SOURCE_EXTENDED, cette derniere (obsolete) macro de test de fonctionnalites n'est generalement pas decrite dans le SYNOPSIS des pages de manuel. _ISOC99_SOURCE (depuis la glibc 2.1.3) Exposer des declarations coherentes avec la norme ISO C99. Les versions anterieures de la glibc 2.1.x reconnaissaient une macro equivalente appelee _ISOC9X_SOURCE (parce que la norme C99 n'etait pas finalisee). Meme si l'utilisation de cette derniere macro est a proscrire, la glibc continue a la reconnaitre pour des raisons de compatibilite ascendante. Si _ISOC99_SOURCE est definie, les definitions du premier amendement au C ISO (1990) (aussi appele C95) sont aussi exposees. La premiere modification de C95 etait la prise en charge des jeux de caracteres internationaux. Invoquer le compilateur C avec l'option -std=c99 produit le meme effet que definir cette macro. _ISOC11_SOURCE (depuis la glibc 2.16) Exposer des declarations coherentes avec la norme ISO C11. La definition de cette macro active egalement les fonctionnalites C99 et C95 (comme _ISOC99_SOURCE). Invoquer le compilateur C avec l'option -std=c11 produit le meme effet que definir cette macro. _LARGEFILE64_SOURCE Exposer les definitions pour l'API alternative definie par le LFS (<< Large File Summit >>) comme une extension de transition pour la << Single UNIX Specification >>. Veuillez vous referer a . L'API alternative consiste en un jeu de nouveaux objets (c'est-a-dire des fonctions et types) dont le nom est suffixe avec << 64 >> (par exemple off64_t pour off_t, lseek64() pour lseek(), etc.). Les nouveaux programmes ne devraient pas utiliser cette macro ; a la place, _FILE_OFFSET_BITS=64 devrait etre utilisee. _LARGEFILE_SOURCE Cette macro a historiquement ete utilisee pour exposer certaines fonctions (en particulier fseeko() et ftello()) qui contournent les limites d'interfaces de programmation precedentes (feek() et ftell()) qui utilisent long pour les positions de fichier. Cette macro est implicitement definie si _XOPEN_SOURCE est definie avec une valeur superieure ou egale a 500. Les nouveaux programmes ne devraient pas utiliser cette macro. Definir _XOPEN_SOURCE comme cela vient d'etre decrit ou definir _FILE_OFFSET_BITS a la valeur 64 sont les mecanismes preferes pour obtenir le meme resultat. _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 systemes 64 bits permettent d'office d'utiliser des fichiers de taille superieure a 2 gigaoctets, et sur ces systemes 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 (obsolete depuis la glibc 2.20) Si cette macro est definie avec n'importe quelle valeur, les definitions heritees de BSD sont exposees par les en-tetes. Jusqu'a la glibc 2.18 incluse, les definitions BSD sont preferees dans les situations ou 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 definie, auquel cas les definitions BSD sont defavorisees. Depuis la glibc 2.19, _BSD_SOURCE ne force plus la preference des definitions BSD en cas de conflit. Depuis la glibc 2.20, cette macro est obsolete. Sa definition a le meme effet que la definition de _DEFAULT_SOURCE, mais genere un avertissement de compilation (a moins que _DEFAULT_SOURCE soit egalement definie). Utilisez _DEFAULT_SOURCE a la place. Pour permettre au code necessitant _BSD_SOURCE dans glibc 2.19 et versions anterieures, et _DEFAULT_SOURCE dans glibc 2.20 et version suivantes, de compiler sans avertissement, definissez a la fois _BSD_SOURCE et _DEFAULT_SOURCE. _SVID_SOURCE (obsolete depuis la glibc 2.20) Si cette macro est definie (quelle que soit sa valeur), les en-tetes exposent les definitions heritees de System V. (SVID == System V Interface Definition ; consultez standards(7).) Depuis la glibc 2.20, cette macro est obsolete de la meme maniere 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 definitions par << defaut >> incluent celles requises par POSIX.1-2008 et C99 ISO ainsi que plusieurs definitions derivees de BSD et System V. Avec la glibc 2.19 et avant, ces definitions par defaut sont a peu pres equivalentes a la definition 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 definie (quelle que soit sa valeur), les en-tetes exposent les definitions d'une serie de fonctions avec le suffixe << at >> ; consultez openat(2). Depuis glibc 2.10, cette macro est aussi definie de maniere implicite si _POSIX_C_SOURCE est definie avec une valeur superieure ou egale a 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 bibliotheques C il etait necessaire de definir cette macro dans tous les codes multithread (cela peut etre encore necessaire dans quelques bibliotheques C). Dans la glibc, cette macro expose aussi des definitions de certaines fonctions reentrantes. Cependant, la glibc est thread-safe par defaut depuis de nombreuses annees. Depuis la glibc 2.3, le seul effet de definir _REENTRANT est d'activer une ou deux des memes declarations qui sont activees en definissant _POSIX_C_SOURCE avec une valeur 199606L ou superieure. _REENTRANT est desormais obsolete. Dans la glibc 2.25 et les versions posterieures, definir _REENTRANT est equivalent a definir _POSIX_C_SOURCE avec comme valeur 199606L. Si un niveau de conformite POSIX superieur est selectionne par n'importe quel autre moyen (tel que _POSIX_C_SOURCE lui-meme, _XOPEN_SOURCE, _DEFAULT_SOURCE ou _GNU_SOURCE), puis definir _REENTRANT n'a aucun effet. This macro is automatically defined if one compiles with cc -pthread. _THREAD_SAFE Synonyme de _REENTRANT (obsolete), fourni pour la compatibilite avec d'autres implementations. _FORTIFY_SOURCE (depuis la glibc 2.3.4) Definir cette macro cause certaines verifications peu poussees d'etre realisees pour detecter quelques depassements de tampon lors de l'emploi de diverses chaines et de fonctions de manipulation de memoire (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 caracteres larges de celles-ci). Pour certaines fonctions, la pertinence de l'argument est verifiee. Par exemple, une verification est faite qu'un argument mode soit fourni a open(2) quand les indicateurs indiques incluent O_CREAT. Tous les problemes ne sont pas detectes, seulement quelques cas courants. Si _FORTIFY_SOURCE est defini a 1, avec un niveau 1 d'optimisation de compilateur (gcc -O1) ou superieur, des verifications sans influence sur le comportement de programmes conformes sont faites. Avec _FORTIFY_SOURCE defini a 2, des verifications supplementaires sont ajoutees, mais certains programmes conformes peuvent echouer. Certaines verifications peuvent etre effectuees lors de la compilation (a l'aide d'une logique de macros implementes dans les en-tetes) et generent des avertissements du compilateur. D'autres verifications ont lieu a l'execution et causent une erreur si le test echoue. 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. Definitions par defaut, definitions implicites et combinaison de definitions 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 definie explicitement, alors _BSD_SOURCE, _SVID_SOURCE et _DEFAULT_SOURCE ne sont pas definies par defaut. Si ni _POSIX_SOURCE ni _POSIX_C_SOURCE ne sont definies explicitement et que soit __STRICT_ANSI__ n'est pas definie soit _XOPEN_SOURCE est definie a une valeur superieure ou egale a 500, alors - _POSIX_SOURCE est definie a la valeur 1 - _POSIX_C_SOURCE est definie avec une des valeurs suivantes : - 2, si _XOPEN_SOURCE est definie avec une valeur inferieure a 500 ; - 199506L, si _XOPEN_SOURCE est definie a une valeur superieure ou egale a 500 et inferieure a 600, ou - 200112L (depuis la glibc 2.4), si _XOPEN_SOURCE est definie a une valeur superieure ou egale a 600 et inferieure a 700 ; - 200809L (depuis la glibc 2.10), si _XOPEN_SOURCE est definie a une valeur superieure ou egale a 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 dependra 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 etre definies, les resultats sont additifs. STANDARDS POSIX.1 specifie _POSIX_C_SOURCE, _POSIX_SOURCE et _XOPEN_SOURCE. _FILE_OFFSET_BITS is not specified by any standard, but is employed on some other implementations. _BSD_SOURCE, _SVID_SOURCE, _DEFAULT_SOURCE, _ATFILE_SOURCE, _GNU_SOURCE, _FORTIFY_SOURCE, _REENTRANT, and _THREAD_SAFE are specific to glibc. HISTORIQUE _XOPEN_SOURCE_EXTENDED was specified by XPG4v2 (aka SUSv1), but is not present in SUSv2 and later. NOTES est un fichier d'en-tete specifique a Linux/glibc. D'autres systemes ont un fichier similaire, mais typiquement sous un nom different. Ce fichier est inclus automatiquement par les autres en-tetes si necessaire : il n'est pas necessaire de l'inclure explicitement pour utiliser les macros de test de fonctionnalites. Selon quelles macros de test de fonctionnalites ci-dessus sont definies, definit diverses autres macros qui sont testees par les en-tetes de la glibc. Ces macros ont des noms prefixes par deux caracteres de soulignement (par exemple __USE_MISC). Les programmes ne doivent jamais definir ces macros directement ; ils doivent utiliser les macros de test de fonctionnalites de la liste precedente. EXEMPLES Le programme ci-dessous peut etre utilise pour explorer comment les differentes macros de test de fonctionnalites sont configurees en fonction de la version de la glibc et quelle macros sont explicitement definies. L'execution qui suit dans un interpreteur de commandes, sur un systeme 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 #include #include #include 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 francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot et Jean-Paul Guillonneau Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.06 31 octobre 2023 feature_test_macros(7)