首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C中用于枚举标志的替换

C中用于枚举标志的替换
EN

Stack Overflow用户
提问于 2013-07-20 04:13:54
回答 2查看 1K关注 0票数 0

我在C编程语言中使用了很多枚举标志。一个很好的解决方案。但是我现在有一个问题:我需要实现超过32个标志-选项,这是1 << 32enum无法保存,因为它是一个太大的值。

那我该怎么解决这个问题?也许我应该用#define代替enum,用unsigned long int代替unsigned int?这样行吗?有位字段的struct对我来说不是一个有效的解决方案,因为它是而不是C ANSI标准代码。

EN

Stack Overflow用户

回答已采纳

发布于 2013-07-20 04:46:04

你应该复习一下 in C

听起来好像您使用的是普通形式的枚举:

代码语言:javascript
运行
复制
enum
{
    FLAG_A = 0x00000001, FLAG_B = 0x00000002, FLAG_C = 0x00000004, FLAG_D = 0x00000008,
    ...
};

您还可以将这些不同的枚举值组合为(32位) unsigned int值和按位操作。现在,您已经达到了极限;您有超过32个标志(我相信它们的命名比我的示例更有意义)。

您可以决定启动一个新的枚举系列,使用第二个32位(无符号)整数来存储这些位。这具有将符号保留在可调试程序中的优点(与#define常量不同,即使在可调试程序中也很少可用)。缺点是,您可能需要传递两个以前传递的值。

如果必须将标志保留在单个变量中,则需要检查使用unsigned long long更好还是使用两个unsigned int值的结构是否更好。

我同意最好不要使用位字段,尽管它们可能工作得很好。为了避免使用#define,我也会付出很大的努力,并且可能会使用两个32位变量或一个结构。这在很大程度上取决于您的代码库,以及这些值的使用范围。

票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17758586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档