2011-05-28 23 views

回答

2

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(您會看到一些非常有趣的錯誤)。

+0

我也應該注意'clang'沒有這個功能。我懷疑MSVC的確如此,但我不確定。使用編譯器開關重新定義類型的大小通常被認爲是不好的做法,通常最好自己打包。 – 2011-05-28 04:59:34

+1

最好使用enum打包在enum上的gcc屬性。 - short-enums可能會對從第三方庫包含的標題產生意想不到的影響。 (http://oroboro.com/short-enum/) – 2013-12-11 02:55:06

0

C++ 11引入了一個標準化的方式來做到這一點,但因爲這是C,你必須解決一個更簡單的方法,使最後一個枚舉INT_MAX或值足夠大,只有你的類型想擁有它(這是DirectX SDK所做的)。不幸的是,沒有辦法強制最大大小(至少不是沒有編譯器特定的擴展)。