今天有个同事找到我,说发现了一个很神奇的问题,编译代码提示了未定义错误,但是明明包含了对应的头文件,而且查了好几遍,确认不存在包含错的问题,但就是编译失败,都怀疑是编译器 BUG 了!
首先本着严谨的态度,不能说编译器不存在 BUG,但从实际角度来看,我们使用的编译器都是稳定发布版,而且用的都是最基本的功能,且未定义错误算是最基本的错误类型了,这种情况下出 BUG 的概率可以说微乎其微,所以还是让同事打开他的代码看一看。
不看不知道,一看 … 就很明了了!实际上这个问题很典型,很多老工程师在开发一些比较复杂的项目时如果稍不留神也会出现这种问题,不过只要你了解了问题的原因,下次再出现时就能很快定位到问题点并解决。
我们今天就来看看这到底是个啥问题!
首先我们准备几个代码文件,分别为 a.c,a.h,b.h:
/**
* a.c
*
**/
#include <stdio.h>
#include "a.h"
#include "b.h"
int main(void) {
File1Struct file1;
File2Struct file2;
file1.data = 100;
file1.ptr = &file2; // 使用 b.h 中的结构体
file2.ptr = NULL; // 初始化指针
printf("File1 data: %d\n", file1.data);
return 0;
}
/**
* a.h
*
**/
#ifndef A_H
#define A_H
#include "b.h"
typedef

最低0.47元/天 解锁文章
964

被折叠的 条评论
为什么被折叠?



