相关疑难解决方法(0)

C中枚举的大小是多少?

我正在创建一组枚举值,但我需要每个枚举值为64位宽.如果我没记错的话,枚举通常与int的大小相同; 但是我认为我读过某个地方(至少在GCC中),编译器可以使枚举成为保持其值所需的任何宽度.那么,有可能有一个64位宽的枚举?

c enums

138
推荐指数
3
解决办法
17万
查看次数

如何在GCC中指定枚举大小?

我想为枚举指定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)

c enums gcc

8
推荐指数
4
解决办法
2万
查看次数

标签 统计

c ×2

enums ×2

gcc ×1