我有一個C++代碼庫,它可以在兩個平臺上編譯,其中一個是Visual C++ 2013.第二個平臺支持C++ 03(而不是C++ 11) 。第二個平臺的編譯器中的枚舉大小實現是使用最小需要的大小。 VC++實現是使用4個字節,即使它們不需要。如何使用VC++編譯器標誌指定枚舉大小
我想讓VC++將枚舉編譯爲最小的大小,而無需修改代碼。例如,其他編譯器不編譯:
enum MyEnum : unsigned char {};
我搜索了,但是找不到編譯器標誌來支持它。 它們存在嗎?
我有一個C++代碼庫,它可以在兩個平臺上編譯,其中一個是Visual C++ 2013.第二個平臺支持C++ 03(而不是C++ 11) 。第二個平臺的編譯器中的枚舉大小實現是使用最小需要的大小。 VC++實現是使用4個字節,即使它們不需要。如何使用VC++編譯器標誌指定枚舉大小
我想讓VC++將枚舉編譯爲最小的大小,而無需修改代碼。例如,其他編譯器不編譯:
enum MyEnum : unsigned char {};
我搜索了,但是找不到編譯器標誌來支持它。 它們存在嗎?
C++ 03必須瞭解明確的類型,枚舉常量:
enum Enumeration
#if __cplusplus >= 201103L
: unsigned char
#endif
{
ONE = unsigned char(1), // storage type for enum is unsigned char
...
}
謝謝。但是,我想避免明確地說明每個枚舉所需的類型,這是因爲額外的工作和潛在的錯誤 - 如果我爲枚舉添加大的值,它可能會中斷。 – Asaf
這是一個非常好的建議,儘管你可以像'#define ENUM_SIZE:unsigned char'然後枚舉枚舉ENUM_SIZE {}; –
這有寫了這一切可怕的想法。 –
@CaptainObviously我可以想象,如果不知道任何上下文,要求或理性,你會覺得你有足夠的數據來得出結論。這與問題本身的質量有什麼關係? – Asaf
是的,我可以斷定這有可能打破許多事情。在全局範圍內改變'enum'的大小會影響一切。這意味着您的代碼需要和原始代碼期望的'enum' _changes_的定義。如果你正在構建源代碼,那麼如果你只是簡單地鏈接到庫中,那麼問題就不那麼明顯了。如果期望大小,任何依賴它的代碼都可能中斷。預計會查看_all_'enum'類型的用法,然後在您更新到新庫時重新檢查。 –