是否有任何扩展功能可在每个编译器上指定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的要求(并且您会看到一些非常有趣的错误)。

10-07 16:48