Schwerwiegender Fehler C1017
Ungültiger Ausdruck für Ganzzahlkonstante
Der Ausdruck in einer #if
Direktive war nicht vorhanden oder wurde nicht als Konstante ausgewertet.
Konstanten, die mithilfe von "Using #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.
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 ausgewertet wird, 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 #if
CONSTANT_NAME
wertet auf "false" aus, und der code, für den er verwendet YES
werden soll, wird vom Präprozessor entfernt. NO
ist auch nicht definiert (Null), ergibt sich also #elif
CONSTANT_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.
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für