用于指定C枚举大小的GCC / Clang / MSVC扩展?

问题描述

| 是否有任何扩展功能可在每个编译器上指定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所做的)。不幸的是,没有办法强制使用最大大小(至少在没有编译器特定的扩展名的情况下)。