Megosztás a következőn keresztül:


Végzetes C1017-hiba

érvénytelen egész szám állandó kifejezése

Megjegyzések

Az irányelvben szereplő #if kifejezés nem létezik vagy nem lett állandó.

#define használatával definiált állandóknak olyan értékekkel kell rendelkezniük, amelyek egész szám állandóként értékelhetők ki, ha egy #if, #elif, vagy #else irányelvben használják őket.

példa

Az alábbi példa c1017-et hoz létre:

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

Lehetséges megoldás:

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

Mivel CONSTANT_NAME a kiértékelés sztringre és nem egész számra történik, az #if irányelv végzetes C1017-hibát okoz.

Más esetekben az előfeldolgozó nullaként értékeli ki a nem definiált állandót. Ez nem kívánt eredményeket okozhat, ahogy az alábbi példában is látható. YES nincs definiálva, ezért nullára értékel. A kifejezés #ifCONSTANT_NAME kiértékelése hamis, és az előfeldolgozó eltávolítja a használni YES kívánt kódot. NO szintén nincs definiálva (nulla), így #elifCONSTANT_NAME==NO igazra értékeli ki (0 == 0), ami miatt az előfeldolgozó a kódot a #elif részben hagyja az utasításban — pontosan az ellenkezője a várt viselkedésnek.

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

Annak megtekintéséhez, hogy a fordító pontosan hogyan kezeli az előfeldolgozási irányelveket, használja a /P, /E vagy /EP parancsot.