Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
ogiltigt heltalskonstantuttryck
Anmärkningar
Uttrycket i ett #if-direktiv existerade inte eller utvärderades inte som en konstant.
Konstanter som definieras med #define måste ha värden som utvärderas till en heltalskonstant om de används i ett #if, #elif eller #else-direktiv.
Exempel
I följande exempel genereras C1017:
// C1017.cpp
#define CONSTANT_NAME "YES"
#if CONSTANT_NAME // C1017
#endif
Möjlig lösning:
// C1017b.cpp
// compile with: /c
#define CONSTANT_NAME 1
#if CONSTANT_NAME
#endif
Eftersom CONSTANT_NAME utvärderas till en sträng och inte ett heltal #if genererar direktivet det allvarliga felet C1017.
I andra fall utvärderar förprocessorn en odefinierad konstant som noll. Detta kan orsaka oavsiktliga resultat, som du ser i följande exempel.
YES är odefinierat, så det utvärderas till noll. Uttrycket #ifCONSTANT_NAME utvärderas till false och koden som ska användas på YES tas bort av förprocessorn.
NO är också odefinierad (noll), så #elifCONSTANT_NAME==NO utvärderas till sant (0 == 0), vilket gör att förprocessorn lämnar koden i #elif delen av -instruktionen – precis motsatsen till det avsedda beteendet.
// 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
Om du vill se exakt hur kompilatorn hanterar förprocessordirektiv använder du /P, /E eller /EP.