Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
expresión constante de tipo entero no válida
Observaciones
La expresión de una directiva #if no existía o no se ha evaluado como una constante.
Las constantes definidas con #define deben tener valores que se evalúen como una constante de tipo entero si se usan en una directiva #if, #elif o #else.
Ejemplo
En el ejemplo siguiente se genera C1017:
// C1017.cpp
#define CONSTANT_NAME "YES"
#if CONSTANT_NAME // C1017
#endif
Posible solución:
// C1017b.cpp
// compile with: /c
#define CONSTANT_NAME 1
#if CONSTANT_NAME
#endif
Dado que CONSTANT_NAME se evalúa como una cadena y no un entero, la directiva #if genera el error irrecuperable C1017.
En otros casos, el preprocesador evalúa una constante no definida como cero. Esto puede provocar resultados no deseados, como se muestra en el ejemplo siguiente.
YES no está definido, por lo que se evalúa como cero. La expresión #ifCONSTANT_NAME se evalúa como false y el preprocesador quita el código que debía usarse en YES.
NO también está sin definir (cero), por lo que #elifCONSTANT_NAME==NO se evalúa como true (0 == 0), lo que hace que el preprocesador deje el código en la parte #elif de la instrucción (justo lo contrario al comportamiento 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
Para ver exactamente cómo el compilador controla las directivas de preprocesador, use /P, /E o /EP.