gpt4 book ai didi

c - 定义C中用于存储的枚举的数据类型

转载 作者:行者123 更新时间:2023-12-01 16:10:51 24 4
gpt4 key购买 nike

我找不到直接的答案,但是在C中为枚举强制某种数据类型是否可能?

例如,我有一个只包含某些状态的状态机枚举,因此对于内存和性能问题,最好将枚举定义为字节或短数据类型。有什么方法可以在C甚至在Arduino IDE中提供这种行为?

任何帮助表示赞赏

最佳答案

C标准指出,枚举常量(即枚举的“成员”)必须与int类型兼容。但是枚举变量本身可以是其他整数类型。如果您认为这没有任何意义,那是因为它没有:C标准在枚举时是不合理的。

至于如何选择枚举变量对应的整数类型,不幸的是,这是由编译器而不是程序员决定的。在8位Atmel上,枚举变量为8位或16位。

几个编译器提供了一个通过非标准编译器选项设置枚举大小的选项。无论如何,使用这样的功能可能不是一个好主意,因为那样会使代码不可移植。

但是,不管枚举的大小如何,编译器都可以(并且可能会)优化存在枚举的表达式,就像它可以优化任何包含小整数类型的表达式以不使用int进行计算一样,否则C标准通过整数提升来强制执行。

如果您有非常极端的性能要求,请不要使用枚举,而应使用uint8_t。但是,如果您有极高的性能要求,那么您就不会使用业余爱好者的8位MCU!因此,事实证明您的担心不是问题。

继续使用enum,让编译器担心优化。

关于c - 定义C中用于存储的枚举的数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40906704/

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