-1
在C
你可以枚舉這樣的:讓私人枚舉值
enum {
key_1 = 1,
key_2 = 2,
key_3 = 4
};
,我發現,當你把這個在公衆頭,你不能保證在價值觀問題預編譯的實現與公共頭部匹配。例如:
enum lvls {
debuglvl_debug = 0x01
debuglvl_info = 0x02,
debuglvl_warning = 0x04,
debuglvl_error = 0x08,
/* And so on... */
debuglvl_all = 0xFF
};
如果你現在會做這在你的代碼(私人):
if (flags & debuglvl_error) {
/* Do something when debuglvl_error flag is set */
}
沒有保證debuglvl_error
將具有價值0x08
,因爲它可以在頭部很容易地改變文件(當然,如果你想改變這些值,現在它是值得懷疑的,但我只是想要討厭)。所以..有辦法讓枚舉值私有?事情是這樣的:
公頭文件:
enum lvls {
debuglvl_debug,
debuglvl_info,
debuglvl_warning,
debuglvl_error,
debuglvl_all
};
私有實現:
enum lvls {
debuglvl_debug = 0x01
debuglvl_info = 0x02,
debuglvl_warning = 0x04,
debuglvl_error = 0x08,
debuglvl_all = 0xFF
};
我的編譯器不會讓我這樣做,所以是有另一種解決方法呢?我想這是不可能的:我需要依靠我的頭文件始終不變的事實嗎?
爲什麼有人想通過更改標題來打破它?或者,這是一個關於版本控制的問題,其中某人擁有不同版本的頭文件? – 2014-09-02 18:06:28
是關於版本控制和外部更改(無論出於何種原因)。 – d3L 2014-09-02 18:08:12