明明包含了头文件,为何还是显示未定义错误?

今天有个同事找到我,说发现了一个很神奇的问题,编译代码提示了未定义错误,但是明明包含了对应的头文件,而且查了好几遍,确认不存在包含错的问题,但就是编译失败,都怀疑是编译器 BUG 了!

首先本着严谨的态度,不能说编译器不存在 BUG,但从实际角度来看,我们使用的编译器都是稳定发布版,而且用的都是最基本的功能,且未定义错误算是最基本的错误类型了,这种情况下出 BUG 的概率可以说微乎其微,所以还是让同事打开他的代码看一看。

不看不知道,一看 … 就很明了了!实际上这个问题很典型,很多老工程师在开发一些比较复杂的项目时如果稍不留神也会出现这种问题,不过只要你了解了问题的原因,下次再出现时就能很快定位到问题点并解决。

我们今天就来看看这到底是个啥问题!

首先我们准备几个代码文件,分别为 a.ca.hb.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 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WKJay_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值