1
A
回答
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
C++ 11引入了一個標準化的方式來做到這一點,但因爲這是C,你必須解決一個更簡單的方法,使最後一個枚舉INT_MAX
或值足夠大,只有你的類型想擁有它(這是DirectX SDK所做的)。不幸的是,沒有辦法強制最大大小(至少不是沒有編譯器特定的擴展)。
相關問題
- 1. 擴展枚舉在C#
- 2. 擴展枚舉?
- 3. 「擴展」枚舉
- 4. 擴展枚舉
- 5. 擴展枚舉
- 6. 擴展枚舉類
- 7. #define枚舉或如何擴展枚舉
- 8. 可擴展枚舉的擴展方法
- 9. 在C中指定枚舉類型的大小
- 10. 創建可擴展枚舉用於可擴展接口
- 11. 可擴展的枚舉Java
- 12. 擴展.NET MembershipCreateStatus枚舉
- 13. 擴展和枚舉常量
- 14. 擴展和枚舉類型
- 15. Java可擴展枚舉
- 16. 可擴展枚舉計劃
- 17. 擴展/懲戒枚舉
- 18. 枚舉擴展方法
- 19. typescript枚舉擴展未定義值
- 20. 命名約定枚舉擴展類
- 21. .NET枚舉大小?
- 22. 通用接口擴展通用枚舉
- 23. 通用接口擴展通用枚舉
- 24. 如何使用VC++編譯器標誌指定枚舉大小
- 25. 可擴展的枚舉,而無需使用擴展
- 26. C#標誌枚舉字大小
- 27. Java枚舉:列出Class <?中的枚舉值擴展枚舉>
- 28. 採用枚舉大集C#.NET使用枚舉項目C#
- 29. 擴展方法不適用於WCF中的枚舉
- 30. 需要擴展類的枚舉
我也應該注意'clang'沒有這個功能。我懷疑MSVC的確如此,但我不確定。使用編譯器開關重新定義類型的大小通常被認爲是不好的做法,通常最好自己打包。 – 2011-05-28 04:59:34
最好使用enum打包在enum上的gcc屬性。 - short-enums可能會對從第三方庫包含的標題產生意想不到的影響。 (http://oroboro.com/short-enum/) – 2013-12-11 02:55:06