关于头文件中声明变量

来源:互联网 发布:淘宝店铺模板图片 编辑:程序博客网 时间:2024/04/28 17:30
#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;


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

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

原创粉丝点击