共用方式為


嚴重錯誤 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

若要查看編譯器如何處理前置處理器指示詞,請使用 /P/E/EP