为什么要用extern变量

vuqrzk5w 2013-03-26 03:55:15
首先看extern变量的解释
"extern可以置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义"。
extern关键字的作用我很清楚。

但我不清楚 这种使用,为什么要这么使。比如

a.h文件中
extern int aa;
a.c文件中
int aa=0;

那为什么不直接在a.h文件中
int aa;
而在a.c文件中aa=0;
又或者直接在a.h文件中
int aa=0;

我试了都是可以编译通过的。

(这个问题相当于我在问,雨伞有什么用,因为我是个来自从来不下雨的星球,所以即使看到了文字方面的解释,还是不清楚到底在什么情况下需要用它)
...全文
413 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
free大黄蜂 2015-09-08
  • 打赏
  • 举报
回复
如果定义全局变量的头文件只被调用一次,那就不会出现重定义,如果有必要可以用
crjwlaq 2013-03-28
  • 打赏
  • 举报
回复
避免重复包含 实在想在.h文件中 可以用宏处理
wizard_tiger 2013-03-28
  • 打赏
  • 举报
回复
引用 5 楼 startservice 的回复:
定义写在头文件中会导致重复定义。
++
cfc1243570631 2013-03-27
  • 打赏
  • 举报
回复
extern 是声名语句,当然要放到.h文件里了 extern int A 就是说 A 是外部变量,其他文件可以用这个变量。 比如 你有4个文件 1.h 2.h 1.c 2.c 你在1.h中加入extern int A 在2.h中加入extern A 那么在2.c中你就可以使用A变量了,而且这个A变量就是1.h中的A变量 你可以到百度收 auto, register ,extern,static,哪里有详细的解释
101112 2013-03-27
  • 打赏
  • 举报
回复
全局变量要定义在源文件中。需要放在头文件中的有全局变量(不包含静态变量)的声明(注意是声明而不是定义)、全局函数(不包括静态函数的声明)的声明。 若把全局变量定义在头文件中,可能会造成重定义。
wqw_dream 2013-03-26
  • 打赏
  • 举报
回复
引用 5 楼 startservice 的回复:
定义写在头文件中会导致重复定义。
+1
startservice 2013-03-26
  • 打赏
  • 举报
回复
定义写在头文件中会导致重复定义。
AnYidan 2013-03-26
  • 打赏
  • 举报
回复
引用 2 楼 mujiok2003 的回复:
请遵守one definition rule(ODR, 一次定义规则),思考一下“重复定义”是怎么出来的。
一个源文件是一个编译单元,此时看不到别的编译单元的内容
Joseph_ 2013-03-26
  • 打赏
  • 举报
回复
.h :extern int a ; 表示导入一个全局的嘛。 当你多次引用这头文件的时候只会在各个引用的.cpp文件中导入这个全局变量 若果在.h里面定义 那么多次包含头文件 会导致重复定义这个全局变量
mujiok2003 2013-03-26
  • 打赏
  • 举报
回复
请遵守one definition rule(ODR, 一次定义规则),思考一下“重复定义”是怎么出来的。
starytx 2013-03-26
  • 打赏
  • 举报
回复
一般将定义放在.cpp中,声明放在.h中

69,371

社区成员

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

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