我在Ç恆枚舉沒有看到在限定
enum {
MYVAR = 1
};
#ifdef MYVAR
#define VAR 1
#else
#define VAR 2
#endif
printf("VAR = %d", VAR);
有這樣的代碼在這種情況下它會輸出「VAR = 2」。
有什麼辦法讓預處理器看到enum
的定義嗎?
我在Ç恆枚舉沒有看到在限定
enum {
MYVAR = 1
};
#ifdef MYVAR
#define VAR 1
#else
#define VAR 2
#endif
printf("VAR = %d", VAR);
有這樣的代碼在這種情況下它會輸出「VAR = 2」。
有什麼辦法讓預處理器看到enum
的定義嗎?
不,這是不可能的。 #ifdef
和#if
是預處理器的一部分,它在「理解」enum
s的編譯器部分之前完成其運行。
#ifdef
僅適用於預處理器常數(與#define
定義即東西,或傳遞到命令線,比方說編譯器,具有-DMYVAR=123
選項)。
#if
使用整數和字符常量以及預處理器常量。所有不是預處理器常量的標識符都被認爲是未定義的,並且在評估#if
條件時將其解釋爲當它們爲零時。這包括enum
常量。
「替換爲零」 - 否(或誤導)。他們評價結果爲0的#if表達式中......他們不是在其他情況下視爲0,並且永遠不會以文字爲0 –
@JimBalter感謝校正更換!這確實是誤導。 – dasblinkenlight
你在這裏談論兩個不同的東西,*預處理器*和*編譯器*。預處理器在編譯器之前運行,並沒有像枚舉這樣的概念。 –
你說得對。但在正常情況下,預處理器可以看到我使用的變量的名稱。 – yehuda
'MYVAR 1'甚至有效嗎? –