A.h,B.h,C.h为头文件
(.h文件是C语言和【C++】语言的头文件,一般在【.h】类的头文件里面只放入函数声明,宏定义,函数原型,而具体的实现在【.cpp】文件里面。)
Test.c为源文件
假如按照上图的多文件结构进行编译,首先A.h会被拷贝到B.h和C.h,然后Test.c引入了B.h和C.h,此时在预编译的时候,就会拷贝出两份A.h,在链接的时候就会出现两段相同的代码,导致出现重复命名错误。
所以就算按照上图中使用了#ifndef开关,也还是不能避免重复出现被引用的头文件。那么想要避免这种错误,就得注意到,不要在 .h 文件中去进行函数的定义,要换成使用extern关键字去对函数进行声明,至于这个函数的定义,要新建一个 .c 文件去给这个函数进行定义,才能被外部引用。
如下图,这样对Add函数(或者全局变量)进行定义就不会在链接时候出现错误了。
所以 .h 文件只能出现声明,不能出现对函数(或者全局变量)的定义。