关于头文件中声明变量

#ifndef _TEST_H_
#define _TEST_H_


int i = 10;


#endif


想当然觉得这个是不会又问题了,加了条件编译了嘛。事实上链接时候就会出现重复定义错误。

如果只是int i;则在linux,gcc下不会报错,因为这被认为是一个声明。

C/C++的编译模式是单文件编译的,即TestHead1.c和TestHead2.c会分别编译,这两个文件分别编译的时候,其实都不存在_TEST_H_,因此两者都定义了int i = 10,造成重复定义。


由于工程中的每个.c文件都是独立的解释的,即使头文件有
#ifndef _TEST_H_
#define _TEST_H_
....
#enfif
在其他文件中只要包含了test.h就会独立的解释,然后每个.c文件生成独立的标示符。在编译器链接时,就会将工程中所有的符号整合在一起,由于文件中有重名变量,于是就出现了重复定义的错误。


解决方法大家都知道了,就.c中定义int i= 10;.h中声明 extern int i;


总结,头文件中只声明,千万不要有定义。

未完待续,等研究函数和类型定义

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值