Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Ungültiger Ausdruck für Ganzzahlkonstante
Bemerkungen
Der Ausdruck in einer #if Direktive war nicht vorhanden oder wurde nicht als Konstante ausgewertet.
Konstanten, die mithilfe von #define definiert werden, müssen Werte aufweisen, die als ganze Konstante ausgewertet werden, wenn sie in einer #if, #elif oder #else direktiven Anweisung verwendet werden.
Beispiel
Im folgenden Beispiel wird C1017 generiert:
// C1017.cpp
#define CONSTANT_NAME "YES"
#if CONSTANT_NAME // C1017
#endif
Mögliche Lösung:
// C1017b.cpp
// compile with: /c
#define CONSTANT_NAME 1
#if CONSTANT_NAME
#endif
Da CONSTANT_NAME eine Zeichenfolge und keine ganze Zahl auswertet, generiert die #if Direktive einen schwerwiegenden Fehler C1017.
In anderen Fällen wertet der Präprozessor eine nicht definierte Konstante als Null aus. Dies kann zu unbeabsichtigten Ergebnissen führen, wie im folgenden Beispiel gezeigt.
YES ist nicht definiert, sodass sie als Null ausgewertet wird. Der Ausdruck #ifCONSTANT_NAME wertet auf "false" aus, und der Code, der für YES verwendet werden soll, wird vom Präprozessor entfernt.
NO ist auch nicht definiert (Null), und so ergibt #elifCONSTANT_NAME==NO als wahr (0 == 0), wodurch der Präprozessor den Code im #elif Teil der Anweisung belassen wird – genau das Gegenteil des beabsichtigten Verhaltens.
// 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
Um genau zu sehen, wie der Compiler Präprozessordirektiven behandelt, verwenden Sie /P, /E oder /EP.