使用#define索引数组?

时间:2011-12-04 11:06:09

标签: c

这是一个愚蠢的问题,但我无法解决这个问题,而且它开始让我感到烦恼!

我有以下内容(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愚蠢?

2 个答案:

答案 0 :(得分:5)

是。

reg[DS] == 0x10

除非您在代码中的其他位置重新定义了宏DS 在预编译时评估宏。因此,如果您将DS定义为5,则编译器的编译内容为reg[5]

此外,您无法在运行时检查宏值,因为它们在运行时不存在,它们已被替换为它们定义的任何值。

答案 1 :(得分:1)

您理解reg[DS]引用reg的第五个(也就是最后一个)元素是正确的。

如果您认为可能会访问其他元素,我会确保您不会意外地将DS重新定义为其他值,而DS并未发生冲突使用由您所包含的标题之一定义的符号。

请注意,DS在运行时不存在。甚至编译器看不到看到DS,因为它将被预处理器替换为5。这可能会使调试器瘫痪。