user-0 提问: define宏定义的问题

回复:
user: user-1
content: 理解和讨论之前请先学会如何观察！  VC编译选项加/EP /P（项目、属性、配置属性、C/C++、预处理器、预处理到文件：是，预处理取消显示行号：是），重新编译，查看宏展开后对应的.i文件。gcc加-E http://bbs.csdn.net/topics/391003898

user: user-2
content: 引用 8 楼 xixia07m 的回复:[quote=引用 5 楼 shihengzhen101 的回复:] [quote=引用 4 楼 xixia07m 的回复:] 我是说#define     one     AOCC_BSADE[0]            #define      two     AOCC_BSADE[1]            #define      three  AOCC_BSADE[2]       。。。。            #define     ten      AOCC_BSADE[9] 这些 AOCC_BSADE[n]能这样写吗？不会引起歧义吗？AOCC_BSADE[1]不是包含2个元素的数组吗？它能不能代表AOCC_BSADE[9]这个数组的第2个元素来定义成two这个字符呢?我写的顺序没有颠倒吗？是不是应该写成#define  AOCC_BSADE[1]   two?  你这样写没有问题，不过你的数组长度是9，没有#define   ten     AOCC_BSADE[9];这个元素[/quote] AOCC_BSADE[9]不就是从AOCC_BSADE[0]这第一个元素开始数，数到的第10个元素吗？[/quote]如果是10个元素就没有问题

user: user-3
content: 1.首先，楼主得弄明白什么叫宏定义，说明白了，就是给x起一个另外的名字y，那么在程序中，你可以用y去表示x（例如：#define N 10，那么你在程序中就可以用N去表示10），宏定义的好处就是，方便你写程序，对面后期修改程序也能提高效率。  2.楼主你这样做，其实并不是把这些数字存到数组中去，而是给one,two.....等重新修改了一个名字，在后面的程序中，你的one就表示的是 AOCC_BSADE[0]，而不是你想的那样，宏定义没有赋值的功能。  PS：从楼上的回复来看，楼主还需要把数组这方面的东西摸熟，很明显你还没有完全了解数组的用法。

user: user-0
content: 我以上的语句是写在.h头文件里的，在头文件中并没有声明这个AOCC_BSADE[9]数组，只定义了数组的大小为10，即：define AOCC_BSADE  NUM  10，在主程序中才生声明了这个数组char  AOCC_BSADE[AOCC_BSADE  NUM]；，这样可以吗？

user: user-0
content: 引用 5 楼 shihengzhen101 的回复:[quote=引用 4 楼 xixia07m 的回复:] 我是说#define     one     AOCC_BSADE[0]            #define      two     AOCC_BSADE[1]            #define      three  AOCC_BSADE[2]       。。。。            #define     ten      AOCC_BSADE[9] 这些 AOCC_BSADE[n]能这样写吗？不会引起歧义吗？AOCC_BSADE[1]不是包含2个元素的数组吗？它能不能代表AOCC_BSADE[9]这个数组的第2个元素来定义成two这个字符呢?我写的顺序没有颠倒吗？是不是应该写成#define  AOCC_BSADE[1]   two?  你这样写没有问题，不过你的数组长度是9，没有#define   ten     AOCC_BSADE[9];这个元素[/quote] AOCC_BSADE[9]不就是从AOCC_BSADE[0]这第一个元素开始数，数到的第10个元素吗？

user: user-4
content: 上面写错了，AOCC_BSADE[2]数组下表越界了，AOCC_BSADE[1]表示引用AOCC_BSADE数组的第二个元素

user: user-4
content: 我认为可以这么定义，但是宏定义#define结尾的分号应该去掉； 做了宏定义#define   one    AOCC_BSADE[0]后，预处理程序会把程序中所有的 one 标识符都替换成 AOCC_BSADE[0] ； 而且这没有歧义；只有在声明数组的时候，形如AOCC_BSADE[2]，才表示包含两个元素的数组；而在引用数据元素时， AOCC_BSADE[2]表示引用AOCC_BSADE数组的第三个元素。

user: user-2
content: 引用 4 楼 xixia07m 的回复:我是说#define     one     AOCC_BSADE[0]            #define      two     AOCC_BSADE[1]            #define      three  AOCC_BSADE[2]       。。。。            #define     ten      AOCC_BSADE[9] 这些 AOCC_BSADE[n]能这样写吗？不会引起歧义吗？AOCC_BSADE[1]不是包含2个元素的数组吗？它能不能代表AOCC_BSADE[9]这个数组的第2个元素来定义成two这个字符呢?我写的顺序没有颠倒吗？是不是应该写成#define  AOCC_BSADE[1]   two?  你这样写没有问题，不过你的数组长度是9，没有#define   ten     AOCC_BSADE[9];这个元素

user: user-0
content: 我是说#define     one     AOCC_BSADE[0]            #define      two     AOCC_BSADE[1]            #define      three  AOCC_BSADE[2]       。。。。            #define     ten      AOCC_BSADE[9] 这些 AOCC_BSADE[n]能这样写吗？不会引起歧义吗？AOCC_BSADE[1]不是包含2个元素的数组吗？它能不能代表AOCC_BSADE[9]这个数组的第2个元素来定义成two这个字符呢?我写的顺序没有颠倒吗？是不是应该写成#define  AOCC_BSADE[1]   two?

user: user-0
content: 引用 9 楼 xixia07m 的回复:我以上的语句是写在.h头文件里的，在头文件中并没有声明这个AOCC_BSADE[9]数组，只定义了数组的大小为10，即：define AOCC_BSADE  NUM  10，在主程序中才声明了这个数组char  AOCC_BSADE[AOCC_BSADE  NUM]；，这样可以吗？  请问哪位同志能帮我解答这个问题？

user: user-5
content: 去掉后面的分号。 这样你就是使用了。 比如： one = 1; XXX = one;

user: user-0
content: 您说的any(n)是什么意思？  #define  any(n)     AOCC_BSADE[n]; 是怎样的对应关系，能详细解释一下吗？

user: user-6
content: #define   any(n)   AOCC_BSADE[n]