嚴重錯誤 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
也未定義 (零),因此 #elif
CONSTANT_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