這是一個愚蠢的問題,但我不能解決它,它開始激怒我!使用#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很愚蠢?
這是一個愚蠢的問題,但我不能解決它,它開始激怒我!使用#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很愚蠢?
是的。
reg[DS] == 0x10
除非您在代碼中的其他地方重新定義了宏DS
。
宏在預編譯時進行評估。因此,如果您將DS
定義爲5
那麼編譯器編譯的內容是reg[5]
。
另外,您不能在運行時檢查宏值,因爲它們在運行時不存在,它們已被替換爲定義爲的任何值。
您瞭解reg[DS]
是指reg
的第五個(即最後一個)元素是正確的。
如果你認爲一個不同的元素可能會得到訪問,我會確保你沒有重新定義DS
被意外不同的值否則,那DS
不與由一個定義的符號衝突包含的標題。
請注意,DS
在運行時不存在。即使編譯器也看不到DS
,因爲它將被預處理器替換爲5
。這可能會跳過調試器。
最有可能的是,您在運行時如何檢查#define的值? –
您是否嘗試打印DS值? – Oleg
爲什麼不使用枚舉呢? –