c语言多个文件使用全局变量问题

若水风尘 2014-10-24 03:00:32
我是这么实现的,在global.h文件里

#ifndef __GLOBAL__
#define __GLOBAL__
extern char scan_path[40];
extern char log_path[40];
extern char bak_path[40];
extern int fileReader_num;
#endif


然后在global.c里定义

#include "global.h"
char scan_path[40] = “”;
char log_path[40] = “”;
char bak_path[40] = “”;
int fileReader_num = 0;


然后各个文件都包含global.h就可以实现各个文件共享这些全局变量。
但是我后来鬼使神差的试着把global.h文件里的extern关键字给去掉了,也可以实现全局变量~运行效果来说是一样的~
在此想问一下大神们,从实现角度来讲,这两种写法有什么内在的区别啊?
...全文
707 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lm_whales 2014-10-25
  • 打赏
  • 举报
回复
变量和数组声明的extern 最好不要省略 函数的原型声明,以及函数定义的 extern ....如果 不是 extern "C",,extern "C++" 那么完全可以省略。
707wk 2014-10-24
  • 打赏
  • 举报
回复
没试过,但最好别这么做。。。
罗博士 2014-10-24
  • 打赏
  • 举报
回复
引用 3 楼 Saleayas 的回复:
在link 的时候,由于 .h 里面定义的是弱符号,而在 .c 里面定义的是强名字。 此时他们可以合并的。
是这样吗?难道不是应该每include一次头文件,就产生一组新的变量?
Saleayas 2014-10-24
  • 打赏
  • 举报
回复
在link 的时候,由于 .h 里面定义的是弱符号,而在 .c 里面定义的是强名字。 此时他们可以合并的。
铖邑 2014-10-24
  • 打赏
  • 举报
回复
如果把extern去掉,那么每个包含global.h的源文件里面都有一份定义,他们彼此是不相干的。按理在链接的时候是会冲突的
啊o额iu鱼 2014-10-24
  • 打赏
  • 举报
回复
我也发现了,看起来应该是为了确保可以实现,
按我理解,如果去掉,应该是有可能出错,只是代码太简单正好没出错而已……

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧