C 头文件中的枚举声明

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.中包

我有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.中包括“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()”,所以我想这没问题。谢谢。