feature_test_macros

Autres langues

Langue: fr

Version: 26 avril 2006 (mandriva - 01/05/08)

Section: 7 (Divers)

NOM

feature_test_macros - Macros de test de fonctionnalité

SYNOPSIS

 #include <features.h>
 
 

DESCRIPTION

Les macros de test de fonctionnalité permettent au programmeur de contrôler les définitions qui seront exposées par les fichiers d'en-têtes système lorsqu'un programme est compilé. Cela est utile pour la création d'applications portables, en empêchant les définitions non-standards d'être exposées. D'autres macros peuvent être utilisées pour exposer des définitions non-standards qui ne le sont pas par défaut. Les effets précis de chacune de ces macros de test de fonctionnalité décrites plus loin peuvent être constatés en inspectant le fichier d'en-tête <features.h>.

Pour quelle soit effective, une macro de test de fonctionnalité doit être définie avant l'inclusion de tout autre fichier d'en-tête. Cela peut être fait soit dans la commande de compilation (cc -DMACRO=valeur), soit en définissant la macro dans le code source avant d'inclure les en-têtes.

Linux/glibc reconnait les macros de test de fonctionnalité suivantes :

_POSIX_C_SOURCE
Définir cette macro avec une valeur de 1 fait que les fichiers d'en-têtes exposeront les définitions conformes à POSIX.1-1990 et ISO C (1990). Définir cette macro avec une valeur de 199309 ou plus exposera en plus les définitions pour POSIX.1b (extensions temps réel). Définir cette macro avec une valeur de 199506 ou plus exposera en plus les définitions pour POSIX.1c (threads). Définir cette macro avec une valeur de 200112 exposera les définitions correspondant à la spécification de base de POSIX.1-2001 (excluant l'extension XSI).
_POSIX_C_SOURCE
Définir cette macro obsolète avec n'importe quelle valeur est équivalent à définir _POSIX_SOURCE à une valeur de 1.
_XOPEN_SOURCE
Définir cette macro avec n'importe quelle valeur fera que les fichiers d'en-têtes exposeront les définitions conformes à POSIX.1, POSIX.2 et XPG4. La définir avec la valeur 500 ou plus exposera en plus les définitions pour SUSv2 (UNIX 98). La définir avec la valeur 500 ou plus exposera en plus les définitions pour SUSv3 (UNIX 03 ; c'est-à-dire, la spécification de base POSIX.1-2001 plus l'extension XSI) et les définitions C99.
_XOPEN_SOURCE_EXTENDED
Si cette macro est définie avec la valeur 1 et que _XOPEN_SOURCE est définie, cela exposera les définitions correspondant aux extensions UNIX XPG4v2.
_ISOC99_SOURCE
Exposer les extensions C99 de ISO C (1990).
_LARGEFILE64_SOURCE
Exposer les définitions pour l'API alternative spécifiée par LFS (Large File Summit) comme une « extention transitionnelle » les « Single UNIX Specification ». (Voir http://opengroup.org/platform/lfs.html.)
_FILE_OFFSET_BITS
Définir cette macro avec la valeur 64 convertira automatiquement les références aux fonctions 32 bits et aux types de données relatives aux entrées-sorties de fichiers et aux opérations sur le système de fichiers en leurs équivalents 64 bits. Cela est utile pour effectuer des entrées-sorties sur de gros fichiers (> 2 Gigaoctets) sur des systèmes 32 bits.
_BSD_SOURCE
Définir cette macro avec n'importe quelle valeur fera que les fichiers d'en-têtes exposeront les définitions dérivées de BSD. Définir cette macro fera aussi que les définitions BSD seront préférées dans les situations où les normes sont en conflit.
_SVID_SOURCE
Définir cette macro avec n'importe quelle valeur fera que les fichiers d'en-têtes exposeront les définitions dérivées de System V. (SVID == System V Interface Definition ; standards(7).)
_GNU_SOURCE
Définir cette macro avec n'importe quelle valeur est équivalent à définir _BSD_SOURCE, _SVID_SOURCE, _LARGEFILE64_SOURCE, _ISOC99_SOURCE _POSIX_C_SOURCE avec la valeur 1999506 et _XOPEN_SOURCE avec la valeur 600. De plus, diverses extensions spécifiques GNU seront également exposées.
_REENTRANT
Définir cette macro expose les définitions de certaines fonctions réentrantes. Pour les programmes multithreadés, utilisez cc -pthread à la place.
_THREAD_SAFE
Synonyme de _REENTRANT, fourni pour compatibilité avec quelques autres implémentations.
_FORTIFY_SOURCE
Définir cette macro déclenche certaines vérifications peu couteuses pour détecter certaines erreurs de débordements de tampon lors de l'utilisation de diverses fonctions de manipulation de chaînes et de mémoire. Tous les débordements de tampon ne sont pas détectés, juste dans certains cas fréquents. Dans l'implémentation actuelle, des vérifications sont ajoutées pour les appels à memcpy(3), mempcpy(3), memmove(3), memset(3), stpcpy(3), strcpy(3), strncpy(3), strcat(3), strncat(3), sprintf(3), snprintf(3), vsprintf(3), vsnprintf(3), et gets(3). Si _FORTIFY_SOURCE est définie à 1, avec une optimisation de compilation de niveau 1 (gcc -O1) ou plus, vérifie que cela ne modifie pas le comportement des programmmes conformes. Avec _FORTIFY_SOURCE définie à 2, des vérifications supplémentaires sont ajoutées mais certains programmes conformes peuvent échoués. Certaines des vérifications peuvent être effectuées à la compilation et générent des avertissements de la part du compilateur ; d'autres auront lieu à l'exécution et provoqueront une erreur d'exécution si la vérification échoue. L'utilisation de cette macro nécessite une prise en charge par le compilateur disponible dans gcc(1) depuis la version 4.0.

Lorsque gcc(1) est invoqué, les macros suivantes sont définies par défaut : _BSD_SOURCE, _SVID_SOURCE, _POSIX_SOURCE et _POSIX_C_SOURCE=199506. Si des macros individuelles sont définies, les autres macros sont désactivées à moins d'être explicitement définies. (Exception : si _POSIX_C_SOURCE n'est pas définie autrement, elle est toujours définie avec la valeur 200112, (199506 dans les versions de la glibc précédant la 2.4), à moins que le compilateur ne soit invoqué dans l'un de ces modes standards, par exemple avec l'option -std=c99.) Plusieurs macros peuvent être définies ; les résultats s'additionnent.

CONFORMITÉ

POSIX.1 spécifie _POSIX_C_SOURCE, _POSIX_SOURCE et _XOPEN_SOURCE. _XOPEN_SOURCE_EXTENDED était spécifiée par XPG4v2 (aka SUSv1). _FILE_OFFSET_BITS n'est spécifiée par aucune norme mais est employée dans quelques autres implémentations. _BSD_SOURCE, _SVID_SOURCE, _GNU_SOURCE, _FORTIFY_SOURCE, _REENTRANT et _THREAD_SAFE sont spécifiques à Linux (glibc).

NOTES

<features.h> est un fichier d'en-tête spécifique à Linux/glibc. D'autres systèmes ont un fichier analogue mais avec un nom différent. Ce fichier d'en-tête est automatiquement inclus par d'autres fichiers d'en-têtes comme nécessaire : il n'est donc pas nécessaire de l'inclure explicitement pour pouvoir utiliser les macros de test de fonctionnalité.

Selon quelles macros de test de fonctionnalité parmi les précédentes sont définies, <features.h> définit de manière interne diverses autres macros qui sont vérifiées par d'autres fichiers d'en-têtes de la glibc. Ces macros ont des noms préfixés par deux caractères « soulignement » (par exemple : __USE_MISC). Les programmes ne doivent jamais définir ces macros directement : ils doivent à la place utiliser la (les) macro(s) de test de fonctionnalité de la liste précédente.

TRADUCTION

Ce document est une traduction réalisée par Alain Portal <aportal AT univ-montp2 DOT fr> le 4 août 2006 et révisée le 19 novembre 2007.

L'équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité. La version anglaise la plus à jour de ce document est toujours consultable via la commande : « LANG=C man 7 feature_test_macros ». N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.