明明我在头文件写了宏定义,为啥还提示未找到use of undeclared identifier

1、今天调试代码报错如下:

board.c:68:58: error: use of undeclared identifier 'NUMBER_OF_INTERFACES'
INTERFACESControlStruct INTERFACESControl[ NUMBER_OF_INTERFACES ]={0};

一直提示NUMBER_OF_INTERFACES宏未定义,我找这个错误找了好久,可明明我在头文件已经包定义了

        #define NUMBER_OF_INTERFACES 2

2、经百度常见的原因如下:

这个错误提示表明在你的代码中使用了未声明的标识符 NUMBER_OF_INTERFACES 。出现这种情况的原因可能有以下几种情况:

1、头文件没有被正确包含:

        确保在board.c文件中包含了包含NUMBER_OF_INTERFACES定义的头文件。在C语言中,你需要使用#include指令来包含需要使用的头文件。
 

        #include "header_file.h" // 假设NUMBER_OF_INTERFACES在header_file.h中定义


2、头文件路径不正确

        确保头文件的路径正确,并且编译器能够找到它。如果头文件在不同的目录下,你可能需要在#include指令中使用正确的路径。

3、宏定义没有正确展开

        在代码中直接使用NUMBER_OF_INTERFACES作为数组的长度,但是没有加上中括号[],因此编译器无法正确展开宏。修改代码如下:


INTERFACESControlStruct VMACControl[ NUMBER_OF_INTERFACES ];


4、宏定义的作用域问题

        如果NUMBER_OF_INTERFACES是在一个特定的作用域内定义的(例如函数内部),那么在外部作用域中可能无法访问该宏。请确保宏定义的作用域正确,或者在需要使用该宏的地方重新定义它。
 

 可是我已经定义在头文件了,而且c文件已经包含了头文件

明明我在头文件写了宏定义,为啥还提示未找到use of undeclared identifier_第1张图片

所以,问题在哪里找了好久。

3、最后排查,发现c文件中定义了

明明我在头文件写了宏定义,为啥还提示未找到use of undeclared identifier_第2张图片

这个只能在头文件定义的,所以重复了,头文件的宏就会未被使能:

所以原因是,从头文件.h拷贝东西到源文件.c时,一定要注意,不要把头文件的宏定义拷贝过来了

你可能感兴趣的:(C补习,宏定义未定义)