理解宏的使用 extern
2024-08-31 16:13:19
如何定义一个全局变量在一个文件中,然后在其它文件中调用就行,而不需要多次extern外部声明。
由于之前的公司的程序中全局的变量使用得很多,在多个.C文件中会调用,不这样处理做的话就会多处进行extern,所以好处是可以把全局的变量给统一管理起来。
以下程序是label.c
文件
#define LABEL
#include "label.h"
以下程序是label.h
文件
#define label_h
#ifdef LABEL
#define extern
#endif
extern uint16 test;
#endif
如上程序中的label.c
和label.h
文件可知,如果定义了一个全局变量test,那么在其它的.C文件使用这个变量,只需要包含这个label.h
文件就可以,编译器在编译其它.C文件的时候会进入label.h
文件,由于#ifdef LABEL
这个条件不成立,所以程序就直接运行到 extern uint16 test;
,所以就相当于其它.C调用这个外部声明的变量。
那这个 uint16 test
变量在什么的地方定义?因为变量的定义在文件中只能是一次,不然编译的时候会报错,因为编译器在编译程序是会编译文件中的 label.c
,由程序可知会进入label.h
这个.H文件,由于有#define LABEL
,所以满足条件#ifdef LABEL
,有#define extern
是宏定义了extern 为空
,所以extern uint16 test
实际为uint16 test
,即是test变量的定义。
对于全局变量我们应该尽量少去定义它,这样程序模块之间才能做到高内聚低耦合
。
by 羊羊得亿
2017-02-24 ShenZhen
最新文章
- 解决Strokeit在win8下的图标问题和开机启动问题
- [转]响应式WEB设计学习(3)—如何改善移动设备网页的性能
- Sublime Text 2 快捷键 (windows)
- tcl调用tuxedo的一个demo
- 7 linux服务器程序规范
- C# 循环获取目录
- doc下批处理文件的感想
- 【HDOJ】1098 Ignatius's puzzle
- Spring Timer 两种实现
- 黑马程序员—C语言的特点和关键字
- .NET 笔试分享
- python--内建函数(1)
- Apache2.2以上版本与Tomcat整合配置及负载均衡实现
- Navicat Premium 12 破解(MySQL、MariaDB、MongoDB、SQL Server、SQLite)
- python之tkinter使用-滚动条
- jquer导航锚点链接动画效果和返回顶部代码
- <;转>;python字典排序 关于sort()、reversed()、sorted()
- ubuntu and centos各种上网代理设置
- wikioi 1068 乌龟棋
- CADisplayLink分析