我正在创建一组枚举值,但我需要每个枚举值为64位宽.如果我没记错的话,枚举通常与int的大小相同; 但是我认为我读过某个地方(至少在GCC中),编译器可以使枚举成为保持其值所需的任何宽度.那么,有可能有一个64位宽的枚举?
我想为枚举指定64位的枚举大小.这怎么可能通过海湾合作委员会?代码不需要是"可移植的",因为我只对将代码用于x86-32和x86-64 Linux的GCC编译感兴趣.这意味着任何可以提供我想要的功能的黑客都可以,只要它适用于那些目标.
鉴于此代码:
#include <stdlib.h>
#include <stdio.h>
enum some_enum
{
garbage1,
garbage2
};
int main(void)
{
enum some_enum some_val;
printf("size: %lu\n", sizeof(some_val));
return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)
这当前打印出4,而我希望能够强制大小为8.尝试在枚举赋值中指定大于4个字节的值会导致警告.例如,
enum some_enum
{
garbage1 = '12345',
garbage2
};
Run Code Online (Sandbox Code Playgroud)
会产生:
warning: character constant too long for its type [enabled by default]
Run Code Online (Sandbox Code Playgroud)
这里对类似问题的回答似乎没有产生任何好结果.也就是说,由于以下原因产生了相同的警告:
enum some_enum
{
garbage1 = 'adfs',
garbage2 = 'asdfasdf'
};
Run Code Online (Sandbox Code Playgroud)
注意:可以通过编译来关闭多字符警告-Wno-multichar.
由于人们对我为什么这样做感兴趣,我编写了一个反汇编引擎.我将指令的每个部分都作为字符串.所以我希望枚举看起来像这样:
enum mnemonic
{
mov = 'mov',
cmp = 'cmp',
sysenter = 'sysenter'
};
Run Code Online (Sandbox Code Playgroud)
然后,我可以使用以下代码轻松存储语义信息:
enum mnemonic …Run Code Online (Sandbox Code Playgroud)