c - 头文件中的枚举声明

标签 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 修改代码。原始代码是一团糟,我想尽可能少地摆弄它:) 架构即STM32,我使用的是uVision 3 IDE。

谢谢

最佳答案

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

extern 关键字用于变量。

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

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

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

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

关于c - 头文件中的枚举声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17987079/

相关文章:

java - Spring MVC 表单 :radiobuttons tag not setting value attribute

c++ - 重新审视在 C++ 中包含 C 头文件

c++ - 在 Unix/Linux (Ubuntu) 中编译头文件和两个 .cpp 文件

c - pthread_mutex_init 上的段错误

javascript - 如何在 ReactJs typescript 中将多个枚举值传递给变量

c - C中struct中数组和字符串的动态内存分配

c# - 如何将枚举数组放入授权属性中?

c - 包括外部声明的枚举在内的问题 - C 代码

c - 不安全的转换

c - 从 sysfs 恢复或删除 Linux 内核模块