Delen via


Fatale fout C1017

ongeldige expressie voor constante gehele getallen

Opmerkingen

De uitdrukking in een #if-richtlijn bestond niet of evalueerde niet tot een constante.

Constanten die zijn gedefinieerd met behulp #define van moeten waarden bevatten die resulteren in een geheel getalconstante als ze worden gebruikt in een #if, #elifof #else instructie.

Voorbeeld

In het volgende voorbeeld wordt C1017 gegenereerd:

// C1017.cpp
#define CONSTANT_NAME "YES"
#if CONSTANT_NAME   // C1017
#endif

Mogelijke oplossing:

// C1017b.cpp
// compile with: /c
#define CONSTANT_NAME 1
#if CONSTANT_NAME
#endif

Omdat CONSTANT_NAME resulteert in een string en niet in een geheel getal, genereert de #if richtlijn fatale fout C1017.

In andere gevallen evalueert de preprocessor een niet-gedefinieerde constante als nul. Dit kan onbedoelde resultaten veroorzaken, zoals wordt weergegeven in het volgende voorbeeld. YES is niet gedefinieerd, dus het resulteert in nul. De expressie #ifCONSTANT_NAME evalueert naar onwaar en de code voor YES wordt door de preprocessor verwijderd. NO is ook niet gedefinieerd (nul), zodat #elifCONSTANT_NAME==NO naar waar (0 == 0) evalueert, waardoor de preprocessor de code in het #elif gedeelte van de instructie laat staan, precies het tegenovergestelde van het beoogde gedrag.

// 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

Als u precies wilt zien hoe de compiler preprocessorrichtlijnen verwerkt, gebruikt u /P, /E of /EP.