关于#define的用法问题
发布网友
发布时间:2022-05-09 22:24
我来回答
共3个回答
热心网友
时间:2023-10-25 02:46
#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过的东西.就这个意思,应该理解了吧.
热心网友
时间:2023-10-25 02:47
#define 后面不一定要跟第2个操作数的,没有它的话就是无值了,只表示第1操作符号已定义。如果成为已定义的,那么#ifdef就会是真,#ifndef为假。
#ifdef OS_GLOBALS....................................1
#define OS_EXT........................................2
如果在#ifdef OS_GLOBALS前有过一句#define OS_GLOBALS,那么就会执行#define OS_EXT。否则不执行。
热心网友
时间:2023-10-25 02:47
把空格后面的变量定义成空格前面的量