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

Eon*_*nil 5 c compiler-construction size enums

enum是否有任何扩展功能可以指定每个编译器上的C 大小?

  • 海湾合作委员会
  • MSVC

Tra*_*kel 2

使用 GCC,您无法指定确切的长度,但可以使用 让它占据尽可能短的长度-fshort-enums。例子:

#include <stdio.h>

typedef enum
{
    f1, f2
} foo;

int main()
{
    printf("%i\n", sizeof(foo));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译:

gcc program.c -fshort-enums
Run Code Online (Sandbox Code Playgroud)

输出:

1
Run Code Online (Sandbox Code Playgroud)

但是,如果您想链接到任何内容,则必须确保查看您的标头的人也使用它-fshort-enums,否则它将不符合 ABI(并且您会看到一些非常有趣的错误)。