如何定义一个全局变量在一个文件中,然后在其它文件中调用就行,而不需要多次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.clabel.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变量的定义。

对于全局变量我们应该尽量少去定义它,这样程序模块之间才能做到高内聚低耦合

宏的使用 extern

by 羊羊得亿

2017-02-24 ShenZhen

最新文章

  1. 解决Strokeit在win8下的图标问题和开机启动问题
  2. [转]响应式WEB设计学习(3)—如何改善移动设备网页的性能
  3. Sublime Text 2 快捷键 (windows)
  4. tcl调用tuxedo的一个demo
  5. 7 linux服务器程序规范
  6. C# 循环获取目录
  7. doc下批处理文件的感想
  8. 【HDOJ】1098 Ignatius's puzzle
  9. Spring Timer 两种实现
  10. 黑马程序员—C语言的特点和关键字
  11. .NET 笔试分享
  12. python--内建函数(1)
  13. Apache2.2以上版本与Tomcat整合配置及负载均衡实现
  14. Navicat Premium 12 破解(MySQL、MariaDB、MongoDB、SQL Server、SQLite)
  15. python之tkinter使用-滚动条
  16. jquer导航锚点链接动画效果和返回顶部代码
  17. <转>python字典排序 关于sort()、reversed()、sorted()
  18. ubuntu and centos各种上网代理设置
  19. wikioi 1068 乌龟棋
  20. CADisplayLink分析

热门文章

  1. BZOJ 3196 线段树套平衡树
  2. java带package的编译
  3. Python正则表达式初识(二)
  4. Linux下java/bin目录下的命令集合
  5. 【Linux下安装使用virtualenv与virtualenvwrapper】
  6. vim7.4官方源码在vs2013的编译方法及问题总结
  7. android反编译odex文件
  8. JavaScript数组的某些操作(二)
  9. mongo数据库--非关系型数据库
  10. 84.friend友元类