無效的整數常數運算式
備註
#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 也未定義 (零),因此 #elifCONSTANT_NAME==NO 評估為 true (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