错误 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
未定义,因此计算结果为零。 表达式 #if
CONSTANT_NAME
的计算结果为 false,预处理器将删除要在 YES
上使用的代码。 此外,NO
是未定义的 (0),因此 #elif
CONSTANT_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
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈