#ifdef OS_GLOBALS....................................1 #define OS_EXT........................................2 #else..................................................3 #define OS_EXT extern................................4 #endif.................................................5 意思就是说,如果 OS_GLOBALS被定义,则本文件中的 OS_EXT被 替换为空(被忽略), 如果 OS_GLOBALS未被定义,则本文件中的 OS_EXT 被替换为 extern关键字. 意义比较明确, 就是给出了 本文件中哪些变量和函数,在何时需要使用 extern引用 (取决 于其他文件中有无定义 OS_GLOBALS. 为方便你理解, 举个例子. 现在有两文件 AAA.c和 BBB.c AAA.c内容是 #define OS_GLOBALS BBB.c内容是 #ifdef OS_GLOBALS #define OS_EXT #else #define OS_EXT extern #endif OS_EXT void function1(void); 如果AAA.c先于BBB.c编译时,OS_GLOBALS被定义,在BBB.c里,实际上是 void function1(void); // 声明了自己的函数 如果BBB.c先于AAA.c编译,则OS_GLOBALS被定义,在BBB.c里,实际上是 extern void function1(void); // 声明了外部的一个函数. 另外,你想了解的比较重要的是,为什么define后面可以只有一个名字,这个语句的意思就是,将XXXX替换为空(从文本上忽略).比如 #define OS_EXT 意思就是说,在本文件中,凡OS_EXT文本串,在编译时都被替换成空白,被忽略,或者说删除.然而,这不影响它作为#ifdef判断的有效性,OS_EXT仍然是一个被define过的东西.就这个意思,应该理解了吧.