-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