宏定义中使用extern

Posted dongry

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了宏定义中使用extern相关的知识,希望对你有一定的参考价值。

全局变量的定义是会得到内存分配且可以被其他模块通过C语言中extern关键字调用的变量。所以,必须在 .C 或 .H 文件中定义,此种方法很容易导致错误。

以下为UCOSIII中定义全局变量的方法:

部分源码(Os.h文件中):

#ifdef   OS_GLOBALS
#define  OS_EXT
#else
#define  OS_EXT  extern
#endif

Os.h文件中定义了全局变量OS_EXT;在文件"Os_var.c"文件中定义了全局变量OS_GLOBALS

源码如下(Os_var.c文件中)

#define   OS_GLOBALS

当编译器处理"Os_var.C"文件时,它使OS_EXT为空,因为OS_GLOBALS已经在"Os_var.c"定义。所以编译器给每个全局变量分配内存空间,而当编译器处理"Os.h"文件时,OS_GLOBALS 没有定义,OS_EXT被定义为extern,这样用户就可以调用外部全局变量。

以上是关于宏定义中使用extern的主要内容,如果未能解决你的问题,请参考以下文章

inline内联函数

iOS开发中 const,static,extern用法总结

#ifdef __cplusplus+extern "C"的用法

2C++ 的升级

12_关于flask中的宏

在macro_rules中使用另一个宏而不需要生锈的“extern crate”