2013-06-21 77 views
2

使用typedef enum { VALUE_1 = 0x00, ... } typeName;是否在C中有更多开销(具体来说,使用AVR-GCC编译为AVR MCU)比使用typedef unsigned char typeName;,然后仅使用#define VALUE_1 0x00定义每个值?C typedef枚举汇编

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

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

+4

不,枚举的编译时常量也在C中。 –

回答

3

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

但枚举常量总是int类型。 (这不同于C++,其中常数是枚举类型的。)

所以typedef unsigned char ...typedef enum ...将可能改变的类型的大小和表示,如果定义的类型或功能的对象可以不管返回的类型,但常数VALUE_1等将是int类型的任何一种方式。

可能最好使用enum类型;这样编译器可以决定哪种表示是最好的。指定unsigned char的替代方法可以最大限度地减少存储空间,但根据平台的不同,实际上可能会减慢访问对象的速度,例如使用与int兼容的东西。

顺便提一下,typedef并非严格必要。如果你愿意,你可以使用一个标签

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

但你必须引用类型为enum typeName,而不仅仅是typeNametypedef的优点是它可以让你给这个类型一个只有一个标识符的名称。