gpt4 book ai didi

c - enum 导致多重定义的错误,而 typedef enum 不会

转载 作者:太空宇宙 更新时间:2023-11-04 01:05:16 25 4
gpt4 key购买 nike

我正在编译 C 代码。

假设我有头文件 A.h,其中包含一个枚举。我将此文件包含在 2 个 c 文件中 - B.c 和 C.c

公元前:

#include A.h
//....other code...

抄送

#include A.h
//....other code...

当 A.h 包含枚举时:

啊啊

#ifndef A_H
#define A_H

enum my_enum {

//...enum content...

} my_enum;

//...other code...

#endif

当像这样定义时,我从编译器得到一个“符号“my_enum”多次定义”错误,这是可以理解的——因为我在头文件中定义了枚举。

但是,当我键入枚举时,这不会发生-

啊啊

#ifndef A_H
#define A_H

typedef enum my_enum {

//...enum content...

} my_enum;

//...other code...

#endif

这当然会发生,无论 .c 文件中的代码是什么(除了包含 A.h)

这背后的原因是什么?为什么当我对枚举进行 typedef 时它不是多重定义?

最佳答案

enum my_enum {

//...enum content...

} my_enum;

my_enum这里不是类型,而是enum my_enum类型的变量。将此包含在 header 中会导致变量 my_enum 的多重定义。

typedef enum my_enum {

//...enum content...

} my_enum;

my_enum 这里是一个类型,不是变量。它是与 enum my_enum 相同的类型。这就是 typedef 的功能。

关于c - enum 导致多重定义的错误,而 typedef enum 不会,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24882625/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com