无效的整数常量表达式
注解
#if 指令中的表达式不存在或未计算为常量。
使用 #define 定义的常量必须具有计算结果为整数常量的值(如果它们在 #if、#elif、#else 指令中使用)。
示例:
以下示例生成 C1017:
// C1017.cpp
#define CONSTANT_NAME "YES"
#if CONSTANT_NAME // C1017
#endif
可能的解决方法:
// C1017b.cpp
// compile with: /c
#define CONSTANT_NAME 1
#if CONSTANT_NAME
#endif
由于 CONSTANT_NAME 计算结果为字符串而不是整数,因此 #if 指令将生成致命错误 C1017。
在其他情况下,预处理器将未定义的常量计算为零。 这可能会导致意外的结果,如以下示例所示。
YES 未定义,因此计算结果为零。 表达式 #ifCONSTANT_NAME 的计算结果为 false,预处理器将删除要在 YES 上使用的代码。 此外,NO 是未定义的 (0),因此 #elifCONSTANT_NAME==NO 的计算结果为 (0 == 0),导致预处理器将代码保留在语句的 #elif 部分,这与预期行为正好相反。
// 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