Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Neplatný celočíselná konstanta výrazu
Poznámky
Výraz v direktivě #if neexistuje nebo se nevyhodnotil jako konstanta.
Konstanty definované pomocí #define musí mít hodnoty, které se vyhodnotí jako celočíselná konstanta, pokud jsou použity v #if#elif, nebo #else direktivě.
Příklad
Následující příklad vygeneruje C1017:
// C1017.cpp
#define CONSTANT_NAME "YES"
#if CONSTANT_NAME // C1017
#endif
Možné řešení:
// C1017b.cpp
// compile with: /c
#define CONSTANT_NAME 1
#if CONSTANT_NAME
#endif
Vzhledem k tomu CONSTANT_NAME , že se vyhodnotí jako řetězec a ne celé číslo, generuje #if direktiva závažnou chybu C1017.
V jiných případech preprocesor vyhodnotí nedefinovanou konstantu jako nulu. To může způsobit nezamýšlené výsledky, jak je znázorněno v následujícím příkladu.
YES je nedefinovaný, takže se vyhodnotí jako nula. Výraz #ifCONSTANT_NAME se vyhodnotí jako false a preprocesor odebere kód, na který se má použít YES .
NO je také nedefinovaný (nula), takže #elifCONSTANT_NAME==NO se vyhodnotí jako true (0 == 0), což způsobí, že preprocesor nechá kód v #elif části příkazu – přesně naopak zamýšleného chování.
// 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
Chcete-li přesně zjistit, jak kompilátor zpracovává direktivy preprocesoru, použijte /P, /E nebo /EP.