Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
espressione costante integer non valida
Osservazioni:
L'espressione in una #if direttiva non esiste o non ha restituito una costante.
Le costanti definite tramite #define devono avere valori che restituiscono una costante integer se vengono usate in una #ifdirettiva , #elifo #else .
Esempio
L'esempio seguente genera l'errore C1017:
// C1017.cpp
#define CONSTANT_NAME "YES"
#if CONSTANT_NAME // C1017
#endif
Possibile soluzione:
// C1017b.cpp
// compile with: /c
#define CONSTANT_NAME 1
#if CONSTANT_NAME
#endif
Poiché CONSTANT_NAME restituisce una stringa e non un numero intero, la #if direttiva genera un errore irreversibile C1017.
In altri casi, il preprocessore valuta una costante non definita come zero. Ciò può causare risultati imprevisti, come illustrato nell'esempio seguente.
YES non è definito, quindi restituisce zero. L'espressione #ifCONSTANT_NAME restituisce false e il codice da usare in YES viene rimosso dal preprocessore.
NO è anche indefinito (zero), quindi #elifCONSTANT_NAME==NO restituisce true (0 == 0), causando il preprocessore di lasciare il codice nella #elif parte dell'istruzione , esattamente l'opposto del comportamento previsto.
// 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
Per vedere esattamente come il compilatore gestisce le direttive del preprocessore, usare /P, /E o /EP.