0
点赞
收藏
分享

微信扫一扫

关于源文件的#define重复引用的问题

非宁静不致远 2022-04-25 阅读 41
c语言

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 文件只能出现声明,不能出现对函数(或者全局变量)的定义。

 

举报

相关推荐

0 条评论