undeclared (first use in this function)

当C语言项目中一个头文件里的枚举在其他文件中使用时,如果没有正确包含头文件会导致‘undeclared’错误。解决方法是在引用枚举的头文件中重新声明该枚举,或者确保所有使用枚举的文件都包含定义它的头文件。
摘要由CSDN通过智能技术生成

'xxx' undeclared (first use in this function)

     1  加头文件!

     2   添加修改声明!

        我使用的场景:在a.h文件里声明一个枚举xxx,该枚举在a.c中使用到了这个枚举,同时有个b.h和b.c两个文件,其中b.c也是用到了这个枚举,b.c包含了a.h和b.h。在b.c中封装了对外接口,若其他文件c.c访问到这个接口,并应用到这个枚举,只包含了b.h的话,就会报这个错误,当然把a.h也包含上就不会出现这个错误。

        举个例子:比如说有a.h,b.h,a.c,b.c,c.c五个文件,a文件是比较底层的接口实现,b文件对a文件的接口进行了封装,使其更通用一点了,然后c.c去使用这些通用接口。

a.h声明如下:

typedef enum enTest
{
    member0,
    member1,
    member2,
}test_e;

extern int add(int a, int b);

a.c

#include <stdio.h>
#include "a.h"

int add(int a, int b)
{
    return a + b + member2;
}

int main()
{
    
    return 0;
}

b.h

extern int ADD(int a, int b, test_e enM);

b.c

#include <stdio.h>
#include "a.h"
#include "b.h"

int ADD(int a, int b, test_e enM)
{
    int ret = add(a, b);
    return ret + enM;
}

c.c

#include <stdio.h>
#include "b.h"

int main()
{
    int ret = 0;
    int a = 3;
    int b = 5;
    
    ret = ADD(a, b, member2);
    printf("%d\n", ret);
    return 0
}

        c.c中使用到了a.h中申明的枚举,但没有包含a.h,所以会报错undeclared (first use in this function)。此时可以添加a.h即可解决问题。但是其他任何文件使用b.h中的接口和a.h中的枚举时,都要包含这两个头文件,会比较麻烦。

        解决方法是:在b.h中也声明一下这个枚举,但名字不能重复,且位置相对应不动,这样c.c中使用只需要包含b.h文件即可。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值