错误 C1017

无效的整数常量表达式

#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

若要查看编译器如何处理预处理器指令,请使用 /P/E/EP