Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
expressão constante inteira inválida
Observações
A expressão numa #if diretiva não existia ou não era uma constante.
As constantes definidas usando #define devem ter valores que correspondem a uma constante inteira se forem usadas numa #if, #elif ou #else diretiva.
Exemplo
O exemplo a seguir gera C1017:
// C1017.cpp
#define CONSTANT_NAME "YES"
#if CONSTANT_NAME // C1017
#endif
Resolução possível:
// C1017b.cpp
// compile with: /c
#define CONSTANT_NAME 1
#if CONSTANT_NAME
#endif
A diretiva #if gera o erro fatal C1017 porque CONSTANT_NAME avalia como uma cadeia de caracteres e não como um inteiro.
Em outros casos, o pré-processador avalia uma constante indefinida como zero. Isso pode causar resultados não intencionais, como mostrado no exemplo a seguir.
YES é indefinido, por isso avalia a zero. A expressão #ifCONSTANT_NAME é avaliada como false e o código a ser usado em YES é removido pelo pré-processador.
NO também é indefinido (zero), portanto #elifCONSTANT_NAME==NO avalia como true (0 == 0), fazendo com que o pré-processador deixe o código na #elif parte da instrução — exatamente o oposto do comportamento pretendido.
// 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
Para ver exatamente como o compilador lida com diretivas de pré-processador, use /P, /E ou /EP.