变量的申明与定义

今天突然想到一个问题:在头文件(.h)文件中定义的变量 int a=13 为什么在其他的地方不能使用extern申明之后直接使用呢,这样不就可以避免include“.h”这种笨拙的方式了吗。网上查找了很多资料,都是众说纷纭。但是从这些博客中可以得出这么一个结论:在头文件中只能申明变量,而无法定义变量。变量的定义需要在源文件(.cpp)中进行。变量的申明和定义最大的区别在于是否存在内存的分配。

但是这又使我又陷入另一个问题的思考中:在头文件中int a=12这种写法只是简单的申明一个变量吗,这里对变量赋值了,应该存在着内存的分配啊。后来自己写example测底证实了头文件中只存在着变量的定义,无变量的申明这一结论。


证实方式:

1.大家都知道全局变量不能重复定义,但是可以重复申明。 在1.h中写上 int a=12,在2.cpp中写上int a=13 编译正常通过。输出a的值为13.由此可见在源文件1.h中只存在变量的申明,无定义。

2.在1.h中写上int a=12,在 1.cpp中写上 #include"1.h",在2.cpp中写上int a=13 编译不能通过。提示:变量a的重复定义。 分析其原因:#include“1.h”实质上是将1.h源文件中的代码复制到1.cpp中,由于代码复制之后使得 1.cpp中存在int a=12语句,故变量a在1.cpp中被定义了;而2.cpp中也存在int a=13语句使得变量a被重复定义。


以上结论也能说明为什么在头文件中需要 #ifdef #endif 等条件编译语句,目的就在于避免变量的重复定义。一旦该头文件被某个源文件包含之后,该头文件中申明的变量就在该源文件中被定义;如果该头文件被几个源文件包含,则该头文件中申明的变量就有重复定义的风险了。 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值