Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier les répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer de répertoire.
expression constante entière non valide
Remarques
L’expression dans une directive #if n’existait pas ou n’était pas évaluée à une constante.
Les constantes, définies à l’aide de #define, doivent avoir des valeurs évaluées à une constante entière si elles sont utilisées dans une directive #if, #elif ou #else.
Exemple :
L’exemple suivant génère l’erreur C1017 :
// C1017.cpp
#define CONSTANT_NAME "YES"
#if CONSTANT_NAME // C1017
#endif
Résolution possible :
// C1017b.cpp
// compile with: /c
#define CONSTANT_NAME 1
#if CONSTANT_NAME
#endif
CONSTANT_NAME prenant la valeur d’une chaîne et non d’un entier, la directive #if génère une erreur irrécupérable C1017.
Dans d’autres cas, le préprocesseur évalue une constante non définie à zéro. Cela peut entraîner des résultats inattendus, comme illustré dans l’exemple suivant.
YES n’est pas défini et prend donc la valeur zéro. L’expression #ifCONSTANT_NAME prend la valeur false et le code à utiliser sur YES est supprimé par le préprocesseur.
NO est également non défini (zéro). #elifCONSTANT_NAME==NO prend ainsi la valeur true (0 == 0), ce qui provoque l’abandon par le préprocesseur due code dans la partie #elif de l’instruction, exactement l’opposé du comportement prévu.
// C1017c.cpp
// compile with: /c
#define CONSTANT_NAME YES
#if CONSTANT_NAME
// Code to use on YES...
#elif CONSTANT_NAME==NO
// Code to use on NO...
#endif
Pour afficher exactement la manière avec laquelle le compilateur gère les directives du préprocesseur, utilisez /P, /E ou /EP.