Chinaunix首页 | 论坛 | 博客
  • 博客访问: 184091
  • 博文数量: 63
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 810
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-03 17:24
文章分类

全部博文(63)

文章存档

2011年(1)

2009年(25)

2008年(37)

我的朋友

分类: LINUX

2008-12-26 17:07:48

#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过的东西.就这个意思,应该理解了吧.
阅读(1340) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~