请看:
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.   

    没什么意思呀
    只是在看的时候比较容易理解
    你可以看到PTR_ATTRIBUTE的定义是空的,扩展后也就是空格
      

  2.   

    也许只是为了告诉编译器如何处理罢了,正如WINBASEAPI void WINAPI Sleep(...)一样。
      

  3.   

    这是条件编译的用法,用以处理不同平台是的情况。
    注意,“PTR_ATTRIBUTE 和 MEM_ATTRIBUTE只是等效的”发生在没有预定义PTR_ATTRIBUTE的时候。而一旦定义了PTR_ATTRIBUTE,那么bulk_storage的类型就有了变化。可见bulk_storage的具体声明形式完全取决于是否预先声明了MEM_ATTRIBUTE和PTR_ATTRIBUTE。
    呵呵。
      

  4.   

    我们先来看看 这样:在 #include 这个文件先定义
    #define MEM_ATTRIBUTE unsigned那么有  unsigned char bulk_storage [MALLOC_BUFSIZE];
           char unsigned * _heap_of_memory;想想, 一样吗?