gpt4 book ai didi

c - 创建私有(private)枚举值

转载 作者:行者123 更新时间:2023-11-30 18:56:00 25 4
gpt4 key购买 nike

C中,你可以像这样进行枚举:

enum {
key_1 = 1,
key_2 = 2,
key_3 = 4
};

我发现的问题是,当您将其放入公共(public) header 中时,您无法确保预编译实现中的值与公共(public) header 匹配。例如:

enum lvls {
debuglvl_debug = 0x01
debuglvl_info = 0x02,
debuglvl_warning = 0x04,
debuglvl_error = 0x08,
/* And so on... */
debuglvl_all = 0xFF
};

如果您现在在代码中执行此操作(私有(private)):

if (flags & debuglvl_error) {
/* Do something when debuglvl_error flag is set */
}

不能保证 debuglvl_error 的值为 0x08,因为它可以在头文件中轻松更改(当然,如果您要更改这些值,现在是有问题的)值(value)观,但我只是要求多管闲事)。那么..有没有办法将枚举值设为私有(private)?像这样的事情:

公共(public)头文件:

 enum lvls {
debuglvl_debug,
debuglvl_info,
debuglvl_warning,
debuglvl_error,
debuglvl_all
};

私有(private)实现:

 enum lvls {
debuglvl_debug = 0x01
debuglvl_info = 0x02,
debuglvl_warning = 0x04,
debuglvl_error = 0x08,
debuglvl_all = 0xFF
};

我的编译器不允许我这样做,那么还有其他解决方法吗?我想这是不可能的:我是否需要依赖我的头文件始终不变的事实?

最佳答案

您所描述的内容对于 enum 来说是不可能的,因为它违背了 enum 的含义。对于您想要的,您应该只使用外部链接来处理变量。

头文件:

extern const int debug_debug, debug_info,...;

实现文件:

const int debug_debug = 0x01, debug_info = 0x02,...;

为了增加安全性,您可以使用 GCC 的属性语法 __attribute__((section("rodata"))) 将变量放入只读内存中。

关于c - 创建私有(private)枚举值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25629520/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com