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

这些文章是 作者看一些优秀的代码的学习笔记。本篇是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了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值