gpt4 book ai didi

C typedef枚举编译

转载 作者:行者123 更新时间:2023-12-04 04:52:26 26 4
gpt4 key购买 nike

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

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

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

最佳答案

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

但是枚举常量的类型总是 int . (这与 C++ 不同,后者的常量是枚举类型。)

所以typedef unsigned char ...对比 typedef enum ...可能会改变类型的大小和表示,如果你定义类型的对象或返回类型的函数,这可能很重要,但常量 VALUE_1等人的类型为 int无论哪种方式。

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

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

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

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

关于C typedef枚举编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17244945/

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