Pré-processeur
Symbole de pré-processeur
| Symbole | Description |
|---|---|
| _lint | Le symbole de préprocesseur spécial `_lint` est prédéfini afin de déterminer si PC-Lint traite le fichier. Par exemple, si vous ne souhaitez pas que PC-Lint traite le code assembleur intégré (autorisé par certains compilateurs) ou d'autres constructions qui ne sont pas du C pur, essayez la définition prédéfinie `__lint`. Exemple :
PC-Lint ignorera le contenu omis. Notez que PC-Lint ne reconnaît pas les caractères #asm et # ; il ignore simplement tout, à l'exception des instructions conditionnelles : #if, #ifdef, #ifndef, #else, #endif. |
| SPTR | SPTR est un symbole de préprocesseur prédéfini intégré à PC-Lint pour assurer la compatibilité avec le compilateur Lattice C. Il signifie « petit pointeur ». Sa valeur est normalement de 1 afin de pouvoir être utilisé dans les instructions #if. Si une option est spécifiée pour définir des pointeurs de données de 4 octets (via `-sp4`, `-spD4` ou `-mD`, `-mL` ou `-b`) et si cette option est spécifiée avant le traitement d'un fichier, alors SPTR prendra la valeur 1. Le compilateur Lattice contient une construction dans son fichier stdio.h qui définit NULL comme étant égal à 0 si SPTR vaut 1 et à 0L sinon. |
| _C876_BIG | Ce symbole n'est généralement pas défini. Si l'option `-b` est spécifiée (ou toute autre option exigeant des pointeurs de 4 octets) avant le traitement d'un fichier, ce symbole sera défini pour le préprocesseur. Il doit être utilisé dans une instruction `#ifdef` pour déterminer si le modèle de mémoire étendue est activé. Cette option est fournie pour assurer la compatibilité avec le compilateur C86 de Computer Innovations. Ce compilateur contient une construction dans son fichier `stdio.h` qui définit `NULL` comme `0L` si ce symbole est défini, et `0` sinon. |
| M_I86LM | La valeur est définie à 1 si la taille d'un pointeur de données est de 4 octets. Ceci est utilisé pour assurer la compatibilité avec le compilateur C de Microsoft 3.0/4.0. |
| MSDOS | défini comme étant 1 |
Installations de pré-proceseur ANSI
Les fonctions de prétraitement décrites dans cette section sont conformes à la norme ANSI C. Elles sont automatiquement disponibles avec PC-Lint. Cependant, si l'option de prétraitement K&R est activée (+fkp), leur utilisation sera signalée.
Espace blanc initial
Les directives du préprocesseur (celles commençant par #) peuvent éventuellement être précédées d'espaces et/ou de tâches.
Expression #elif
La directive #elif («sinon si») peut être utilisée à l'intérieur d'une instruction #if ... #endif pour éviter plusieurs niveaux de #if. On peut utiliser autant de #elif que nécessaire au même niveau, suivis éventuellement d'un #else. Par exemple :
- #if x
- text 1
- #elif y
- text 2
- #elif z
- text 3
- #else
- text 4
- #endif
peut être utilisé à la place d'une séquence beaucoup plus complexe se terminant par trois #endif.
defined(name)
L'expression `defined(name)`, lorsqu'elle est utilisée dans une instruction `#if` (ou `#elif`), est considérée comme vraie (=1) si le nom a été défini précédemment; sinon, elle est considérée comme fausse (=0). Ainsi :
- #ifdef alpha
est équivalent à :
- #if defined(alpha)
Cependant, la construction définie est considérablement plus flexible. Prenons l'exemple suivant :
- #if defined(alpha) || n
- text 1
- #elif defined(beta)
- text 2
- #endif
Cela peut se faire avec des constructions K&R pures, mais au prix d'une perte considérable de clarté et de concision.
Nom #include
Si le nom est un nom prédéfini dont la valeur est un nom de fichier entre guillemets (ou entre crochets <>), alors le fichier nommé est inclus. Ainsi :
- #define alpha "abc.h"
- #include alpha
provoque l'inclusion du fichier abc.h.
- #pragma ...
Il s'agit d'un mécanisme permettant aux utilisateurs de transmettre des informations dépendantes du compilateur à certains compilateurs sans que les autres ne s'en plaignent. PC-Lint, par exemple, ne génère aucune objection.