头文件中的枚举声明

时间:2013-08-01 06:52:42

标签: c enums header-files

我有A.c,B.c和B.h文件。 在A.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中加入#include“B.h”。 所有文件都在项目的propper文件夹中。 但没有雪茄:( B.c中的这一行给出了:

20: identifier "FROM_SMS" is undefined
70: incomplete type is not allowed

如何使这项工作。 A.c文件是由其他人写的,我正在使用B.c修改代码。原始的代码是一团糟,我想尽可能少与它fidlle :) 架构即STM32和我正在使用uVision 3 IDE。

谢谢

2 个答案:

答案 0 :(得分:8)

枚举是一种类型,你应该放入.h。

extern关键字用于变量。

编辑:对不起,我读错了你的代码。

这里的问题是你将尝试使用枚举而不定义它。 认为当编译器编译某些东西时,它会分别获取每个.c文件,然后将include的内容“复制”到c文件中。

所以在这里你将有b.c,其中包括b.h但由于你的类型的声明是在a.c中,编译器无法知道它,因此在尝试编译b.c时抛出错误。

要解决此问题,只需将您的类型声明在bh的顶部并将其包含在两个文件中,或者创建一个“myenum.h”文件,该文件包含在需要它的.h / .c文件中。

答案 1 :(得分:0)

enum只是define的另一种类型。它只适用于当前的翻译单元。