C/C++:包含int和enum == sizeof(int)的typedef结构的大小?

Str*_*bbl 3 c c++ size struct enumeration

我在我的Ubuntu(i686)上使用gcc版本4.3.3.我写了一个精简测试程序来描述我缺乏理解和我的问题.程序应该告诉我我实现的结构的大小.所以我有一个typedef结构消息和一点点主要打转转:

#include <stdio.h>

typedef struct {
    int size; 
    enum {token=0x123456}; 
} Message;

int main(int argc, char * argv[])
{
    Message m;
    m.size = 30;
    printf("sizeof(int): %d\n",sizeof(int));
    printf("sizeof(0x123456): %d\n",sizeof(0x123456));
    printf("sizeof(Message): %d\n",sizeof(Message));
    printf("sizeof(m): %d\n",sizeof(m));
}
Run Code Online (Sandbox Code Playgroud)

在使用gcc编译此源代码时,我收到以下警告,我不明白:

$ gcc sizeof.c
sizeof.c:5: warning: declaration does not declare anything
Run Code Online (Sandbox Code Playgroud)

第5行指的是枚举线.我希望在我创建的每条消息中都有该令牌.我究竟做错了什么?为了摆脱那个警告我需要改变什么?

我的主要包含几个sizeof()调用.当我运行程序时,您可以在输出中看到整数的大小为4,十六进制数的大小为4,但typedef结构消息的大小也是4:

$ ./a.out
sizeof(int): 4
sizeof(0x123456): 4
sizeof(Message): 4
sizeof(m): 4
Run Code Online (Sandbox Code Playgroud)

这对我来说非常困惑.为什么Message的大小为4,虽然它包含一个整数和一个枚举中的整数,每个大小为4.如果sizeof(Message)至少为8,那对我来说是合乎逻辑的.

但为什么只有4?如何获取消息字节的实际大小?或者这真的是真正的大小?如果是这样,为什么?

在C和C++之间获取Message的大小有什么不同吗?

Som*_*ude 10

枚举实际上不需要任何空间,它只是编译器通过名称识别一组文字数字的一种方式.

  • @Strubbl:没有.它没有在内存中表示,因为它不需要. (3认同)