这是一个愚蠢的问题,但我无法解决这个问题,而且它开始让我感到烦恼!
我有以下内容(reg是全球性的):
#define CS 4
#define DS 5
unsigned char reg[6] = {0, 0, 0, 0, 0, 0x10};
现在,我希望reg [DS]访问数组reg(0x10)的元素5。但是,在调试(VC2010)时,Visual Studio声称DS为零并且访问了第一个元素。是我,还是Visual Studio愚蠢?
答案 0 :(得分:5)
是。
reg[DS] == 0x10
除非您在代码中的其他位置重新定义了宏DS
在预编译时评估宏。因此,如果您将DS
定义为5
,则编译器的编译内容为reg[5]
。
此外,您无法在运行时检查宏值,因为它们在运行时不存在,它们已被替换为它们定义的任何值。
答案 1 :(得分:1)
您理解reg[DS]
引用reg
的第五个(也就是最后一个)元素是正确的。
如果您认为可能会访问其他元素,我会确保您不会意外地将DS
重新定义为其他值,而DS
并未发生冲突使用由您所包含的标题之一定义的符号。
请注意,DS
在运行时不存在。甚至编译器看不到看到DS
,因为它将被预处理器替换为5
。这可能会使调试器瘫痪。