最近在工作过程中遇到了一个编译问题,提示功能函数没有声明,但是检查了多次,确认这些功能函数都声明过了。
我开始使用排除法,首先编译顺序,在Makefile中编译顺序没有问题,排除;
之后检查头文件中函数的声明,没问题,排除;
再来是头文件的包含,也没问题,排除;
接下来检查头文件顺序,也没问题,排除;
这时候我迷茫了,为什么呢?
在我一筹莫展的时候,我突然发现了一个怀疑点,有两个头文件的#ifndef是一样的!!!
然后一切都明朗了,原因找到了,就是因为在不同的头文件中使用了相同的#ifndef,并且声明函数的头文件在第二顺位引用导致的。
在头文件中#ifndef的作用就是防止重复引用的。
这个错误是一个比较低级的错误,原因是公司有特定的编码规范,头文件有一定的格式,当时犯懒就复制了一份来写新的头文件,忘记了修改#ifndef,导致这么个错误。
这是个教训,同时也深化了对于#ifndef的重视,引以为戒,大家共勉。