1,重复包含可能会导致变量重复定义
重复包含:同个.c文件多次包含一个.h文件。
如果.h文件有变量的定义,则会导致变量的重复定义,此.c文件编译出错。
所以要避免重复包含。有两种方法,
一种是
#ifndef "XX_H"
#define "XX_H"
<头文件定义正文>
#endif
另一种是
#pragma once
2,重复定义还可能是另外一种情况产生的。
就是同一个.h文件,被不同的几个.c文件包含,如果.h文件有变量定义,由于各个.c文件的编译时独立进行的,编译过程正常;各个.c文件产生的.o文件链接时,工程中所有的符号整合在一起,由于文件中有重名变量,于是会出现重复定义的错误。
(要说明的是,类,内联函数以及const变量默认视为定义它们的源文件所私有,所以在第2中情况下不会产生重复定义)
那这种情况如何解决呢?
一种解决方案是:.h中只声明,其中一个.cpp中定义,剩余的.cpp文件引用.h。
另一种解决方案:.h中定义,只让一个cpp文件引用,其他cpp文件自己声明。
总之,所有的cpp文件中,对于相同的变量,只能一个定义,其余都是声明(编译时才通过)来引用(链接时会检查引用)。
最后要说明的:
一:什么是声明?什么是定义?
二:什么是内部链接?什么是外部链接?
主要参考链接:
http://blog.csdn.net/ljianhui/article/details/8541454
http://www.cnblogs.com/scut-fm/p/3210229.html