2

在 C中使用 using 是否typedef enum { VALUE_1 = 0x00, ... } typeName;有更多开销(特别是使用 AVR-GCC 为 AVR MCU 编译)而不是使用typedef unsigned char typeName;然后只定义每个值#define VALUE_1 0x00

我的具体应用是可以通过函数返回和检查的状态码。使用该样式对我来说似乎更整洁typedef enum,但我想确保它不会给已编译的应用程序增加任何重大开销。

我会假设没有,但我不确定。我试图寻找类似的问题,但大多数都与 C++ 相关,并且得到了 C++ 的更具体的答案。

4

1 回答 1

3

声明enum创建枚举类型。这种类型与某些预定义的整数类型兼容(因此具有相同的大小和表示形式),但编译器会选择哪一种。

但是枚举常量始终是 type int。(这与 C++ 不同,其中常量是枚举类型。)

所以typedef unsigned char ...vs.typedef enum ...可能会改变类型的大小和表示,如果你定义类型的对象或返回类型的函数,这可能很重要,但常量VALUE_1等将是int任何一种类型的类型。

最好使用enum类型;这样编译器就可以决定哪种表示是最好的。您的指定替代方案unsigned char将最小化存储,但取决于平台,它实际上可能会减慢对对象的访问速度,例如,使用与int.

顺便说一句,typedef 并不是绝对必要的。如果您愿意,可以使用标签

enum typeName { Value_1 = 0x00, ... };

但是您必须将类型称为enum typeName而不仅仅是typeName. 的优点typedef是它允许您为类型指定一个名称,该名称只是一个标识符。

于 2013-06-21T22:17:38.667 回答