防止重复定义的extern技巧的使用

来源:互联网 发布:海岛奇兵坦升级数据 编辑:程序博客网 时间:2024/05/22 00:13

这些文章是 作者看一些优秀的代码的学习笔记。本篇是uc_os中的一些代码。

有不对的地方,欢迎大家拍砖指正。共同进步,O(∩_∩)O~


防止重复定义的extern技巧的使用

如:自己创建一个工程,全局变量应该是得到内存分配并且可以被其他模块通过C语言中的extern关键字调用的变量。

因此,必须在  .C 和 .H 文件中定义或是通过extern来引入,这种重复的定义很容易导致错误。

以下讨论的方法只需在头文件中定义一次,这就是学习本文的目的。



module_name_head.h中



#ifdef module_name_GLOBALS
#define module_name_EXT
#else
#define module_name_EXT extern
#endif

module_name_EXT  INT8U  method_name();   // 对方法的声明


module_name_head_common.c中


#define module_name_GLOBALS   // 此文件中定义了此宏(module_name_GLOBALS   ),所以最好把公用的方法,对外的接口的实现都写在此文件。
#include "module_name_head.h"

module_name_EXT INT8U  method_name()
{
// 实现此方法;

// 此方法是对外的接口,或是本项目中公用的方法;

}


module_name_file_1.c中

#include "module_name_head.h"

module_name_file_2.c中

#include "module_name_head.h"

module_name_file_3.c中

#include "module_name_head.h"


这样的话,在 其余的文件中file_1.c  和 file_2.c 和  file_3.c 中:

module_name_EXT其实都是extern,所以它们都是对module_name__head_common.c文件中

INT8U  method_name()方法的引用;代码中对该方法的调用就ok了。


因此不会出现重复定义的情况。


若是需要添加一个公用方法的话,只需在 XXX_head.h 头文件中添加一个声明,在XXX_head_common.c中添加实现就ok了。

原创粉丝点击