我在C编程语言中使用了很多枚举标志。一个很好的解决方案。但是我现在有一个问题:我需要实现超过32个标志-选项,这是1 << 32,enum无法保存,因为它是一个太大的值。
那我该怎么解决这个问题?也许我应该用#define代替enum,用unsigned long int代替unsigned int?这样行吗?有位字段的struct对我来说不是一个有效的解决方案,因为它是而不是C ANSI标准代码。
发布于 2013-07-20 04:46:04
你应该复习一下 in C。
听起来好像您使用的是普通形式的枚举:
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位变量或一个结构。这在很大程度上取决于您的代码库,以及这些值的使用范围。
https://stackoverflow.com/questions/17758586
复制相似问题