2016-05-09 80 views
0

我有一個C++代碼庫,它可以在兩個平臺上編譯,其中一個是Visual C++ 2013.第二個平臺支持C++ 03(而不是C++ 11) 。第二個平臺的編譯器中的枚舉大小實現是使用最小需要的大小。 VC++實現是使用4個字節,即使它們不需要。如何使用VC++編譯器標誌指定枚舉大小

我想讓VC++將枚舉編譯爲最小的大小,而無需修改代碼。例如,其他編譯器不編譯:

enum MyEnum : unsigned char {}; 

我搜索了,但是找不到編譯器標誌來支持它。 它們存在嗎?

+0

這有寫了這一切可怕的想法。 –

+1

@CaptainObviously我可以想象,如果不知道任何上下文,要求或理性,你會覺得你有足夠的數據來得出結論。這與問題本身的質量有什麼關係? – Asaf

+0

是的,我可以斷定這有可能打破許多事情。在全局範圍內改變'enum'的大小會影響一切。這意味着您的代碼需要和原始代碼期望的'enum' _changes_的定義。如果你正在構建源代碼,那麼如果你只是簡單地鏈接到庫中,那麼問題就不那麼明顯了。如果期望大小,任何依賴它的代碼都可能中斷。預計會查看_all_'enum'類型的用法,然後在您更新到新庫時重新檢查。 –

回答

2

C++ 03必須瞭解明確的類型,枚舉常量:

enum Enumeration 
#if __cplusplus >= 201103L 
    : unsigned char 
#endif 
{ 
    ONE = unsigned char(1), // storage type for enum is unsigned char 
    ... 
} 
+0

謝謝。但是,我想避免明確地說明每個枚舉所需的類型,這是因爲額外的工作和潛在的錯誤 - 如果我爲枚舉添加大的值,它可能會中斷。 – Asaf

+0

這是一個非常好的建議,儘管你可以像'#define ENUM_SIZE:unsigned char'然後枚舉枚舉ENUM_SIZE {}; –