2014-01-12 53 views
-1

我在Ç恆枚舉沒有看到在限定

enum { 
    MYVAR = 1 
}; 

#ifdef MYVAR 
#define VAR 1 
#else 
#define VAR 2 
#endif 

printf("VAR = %d", VAR); 

有這樣的代碼在這種情況下它會輸出「VAR = 2」。

有什麼辦法讓預處理器看到enum的定義嗎?

+4

你在這裏談論兩個不同的東西,*預處理器*和*編譯器*。預處理器在編譯器之前運行,並沒有像枚舉這樣的概念。 –

+0

你說得對。但在正常情況下,預處理器可以看到我使用的變量的名稱。 – yehuda

+1

'MYVAR 1'甚至有效嗎? –

回答

4

不,這是不可能的。 #ifdef#if是預處理器的一部分,它在「理解」enum s的編譯器部分之前完成其運行。

#ifdef僅適用於預處理器常數(與#define定義即東西,或傳遞到命令線,比方說編譯器,具有-DMYVAR=123選項)。

#if使用整數和字符常量以及預處理器常量。所有不是預處理器常量的標識符都被認爲是未定義的,並且在評估#if條件時將其解釋爲當它們爲零時。這包括enum常量。

+2

「替換爲零」 - 否(或誤導)。他們評價結果爲0的#if表達式中......他們不是在其他情況下視爲0,並且永遠不會以文字爲0 –

+0

@JimBalter感謝校正更換!這確實是誤導。 – dasblinkenlight