请看:
1 #ifndef MEM_ATTRIBUTE
2 #define MEM_ATTRIBUTE
3 #endif
4
5 #ifndef PTR_ATTRIBUTE
6 #define PTR_ATTRIBUTE MEM_ATTRIBUTE
7 #endif
8
9 #ifndef MALLOC_BUFSIZE
10 #define MALLOC_BUFSIZE 0x40000
11 #endif
12
13 PTR_ATTRIBUTE char bulk_storage [MALLOC_BUFSIZE];
14 char PTR_ATTRIBUTE *_heap_of_memory;问题:13行和14行究竟是什么意思?PTR_ATTRIBUTE 和 MEM_ATTRIBUTE只是等效的
两个宏,但它们仅仅是被定义的两个宏而已,可是为什么会出现13行和14行
那样的用法呢?我以前从来没见过这样的定义啊!请高手指教!!!!
1 #ifndef MEM_ATTRIBUTE
2 #define MEM_ATTRIBUTE
3 #endif
4
5 #ifndef PTR_ATTRIBUTE
6 #define PTR_ATTRIBUTE MEM_ATTRIBUTE
7 #endif
8
9 #ifndef MALLOC_BUFSIZE
10 #define MALLOC_BUFSIZE 0x40000
11 #endif
12
13 PTR_ATTRIBUTE char bulk_storage [MALLOC_BUFSIZE];
14 char PTR_ATTRIBUTE *_heap_of_memory;问题:13行和14行究竟是什么意思?PTR_ATTRIBUTE 和 MEM_ATTRIBUTE只是等效的
两个宏,但它们仅仅是被定义的两个宏而已,可是为什么会出现13行和14行
那样的用法呢?我以前从来没见过这样的定义啊!请高手指教!!!!
只是在看的时候比较容易理解
你可以看到PTR_ATTRIBUTE的定义是空的,扩展后也就是空格
注意,“PTR_ATTRIBUTE 和 MEM_ATTRIBUTE只是等效的”发生在没有预定义PTR_ATTRIBUTE的时候。而一旦定义了PTR_ATTRIBUTE,那么bulk_storage的类型就有了变化。可见bulk_storage的具体声明形式完全取决于是否预先声明了MEM_ATTRIBUTE和PTR_ATTRIBUTE。
呵呵。
#define MEM_ATTRIBUTE unsigned那么有 unsigned char bulk_storage [MALLOC_BUFSIZE];
char unsigned * _heap_of_memory;想想, 一样吗?