2011-12-04 92 views
1

這是一個愚蠢的問題,但我不能解決它,它開始激怒我!使用#define索引數組?

我有以下(REG是一個全球性的):

#define CS 4 
#define DS 5 

unsigned char reg[6] = {0, 0, 0, 0, 0, 0x10}; 

現在,我希望REG [DS]進入陣列REG(0×10)的元件5。但是,在調試時(VC2010),Visual Studio聲稱DS爲零,並且第一個元素被訪問。是我嗎,還是Visual Studio很愚蠢?

+0

最有可能的是,您在運行時如何檢查#define的值? –

+0

您是否嘗試打印DS值? – Oleg

+0

爲什麼不使用枚舉呢? –

回答

5

是的。

reg[DS] == 0x10 

除非您在代碼中的其他地方重新定義了宏DS
宏在預編譯時進行評估。因此,如果您將DS定義爲5那麼編譯器編譯的內容是reg[5]

另外,您不能在運行時檢查宏值,因爲它們在運行時不存在,它們已被替換爲定義爲的任何值。

1

您瞭解reg[DS]是指reg的第五個(即最後一個)元素是正確的。

如果你認爲一個不同的元素可能會得到訪問,我會確保你沒有重新定義DS被意外不同的值否則,那DS不與由一個定義的符號衝突包含的標題。

請注意,DS在運行時不存在。即使編譯器也看不到DS,因爲它將被預處理器替換爲5。這可能會跳過調試器。