C 头文件中的枚举声明
我有A.c,B.c和B.h的档案。 在交流中有一个C 头文件中的枚举声明,c,enums,header-files,C,Enums,Header Files,我有A.c,B.c和B.h的档案。 在交流中有一个 enum CMD{ FIRST, SECOND, THIRD, }; 后来在那个文件里有 bool function(...){ //... enum CMD data_type = FIRST; //... } 在B.c文件中,我需要使用 if (data_type == FIRST){...} 我试图在B.h中包含以下内容: extern enum CMD data_type; 包括#在A.c.和B.c.中包
enum CMD{
FIRST,
SECOND,
THIRD,
};
后来在那个文件里有
bool function(...){
//...
enum CMD data_type = FIRST;
//...
}
在B.c文件中,我需要使用
if (data_type == FIRST){...}
我试图在B.h中包含以下内容:
extern enum CMD data_type;
包括#在A.c.和B.c.中包括“B.h”。
所有文件都位于项目的propper文件夹中。
但没有雪茄:(
B.c.中的行给出:
20: identifier "FROM_SMS" is undefined
70: incomplete type is not allowed
我该怎么做呢?A.c文件是别人写的,我正在用B.c修改代码。原始代码乱七八糟,我想尽量少用它:)
架构ie STM32,我使用的是uVision 3 IDE
谢谢枚举是一种类型,您应该在.h中输入
extern
关键字用于变量
对不起,我读错了你的代码
这里的问题是,您将尝试在没有定义枚举的情况下使用它。
试想一下,当编译器编译某个东西时,它会分别获取每个.c文件,然后将include的内容“复制”到c文件中
因此,这里您将拥有包含b.h的b.c,但是由于您的类型声明是在a.c中,编译器无法知道它,因此在尝试编译b.c时抛出一个错误
要解决这个问题,只需在b.h顶部声明您的类型并将其包含在两个文件中,或者创建一个“myenum.h”文件,并将其包含在需要它的.h/.c文件中。
enum
只是另一种类型的define
。它只在当前的翻译单元中起作用。您可能希望显示一些实际代码,而不是首先显示此
…对不起,公司对这类事情有严格的政策:(关于什么事情?您不必显示实际代码;您只需生成SSCCE()这不是公司代码,而是从编译器生成等效的错误消息。~20K个视图,零次编辑,1次向上投票。jeezI注释掉了enum CMD{…};定义(声明?)但现在它给了我“B.o文件中未定义的数据类型符号”,这是因为数据类型是函数bool函数(…)
的本地类型。您需要在函数之外的A.c中声明它,然后希望bool函数(…)
在您需要它之前在b.c中调用,并在您的b.c上写入:外部枚举CMD data_type;
,也在任何其他函数定义之外。它已编译。在给定任务结束时,我不会使用“bool function()”,所以我想这没问题。谢谢。