问题描述
|
是否有任何扩展功能可在每个编译器上指定C
enum
的大小?
海湾合作委员会
铛
MSVC
解决方法
使用GCC,您无法指定确切的长度,但是可以使用
-fshort-enums
占用最短的长度。例:
#include <stdio.h>
typedef enum
{
f1,f2
} foo;
int main()
{
printf(\"%i\\n\",sizeof(foo));
return 0;
}
编译:
gcc program.c -fshort-enums
输出:
1
但是,如果您想链接到任何内容,则必须确保查看标头的任何人也使用-fshort-enums
,否则它将不符合ABI的要求(并且您会看到一些非常有趣的错误)。
, C ++ 11引入了一种标准化的方法来执行此操作,但是由于这是C语言,因此您必须选择一种更简单的方法来生成最后一个枚举INT_MAX
或足够大的值,以便仅保留所需的类型它(DirectX SDK所做的)。不幸的是,没有办法强制使用最大大小(至少在没有编译器特定的扩展名的情况下)。