我在我的 Ubuntu (i686) 上使用 gcc 版本 4.3.3。我写了一个精简的测试程序来描述我缺乏理解和我的问题。该程序将告诉我我实现的结构的大小。所以我有一个用于Message的typedef 结构和一个小 main 来玩:
#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));
}
使用 gcc 编译此源时,我收到以下警告,我不明白:
$ gcc sizeof.c
sizeof.c:5: warning: declaration does not declare anything
第 5 行是指枚举行。我希望在我创建的每条Message中都使用该令牌。我究竟做错了什么?我必须改变什么才能摆脱该警告?
我的 main 包含几个sizeof()调用。当我运行程序时,您可以在输出中看到整数的大小为 4,十六进制数的大小为 4,但 typedef struct Message 的大小也为 4:
$ ./a.out
sizeof(int): 4
sizeof(0x123456): 4
sizeof(Message): 4
sizeof(m): 4
这让我很困惑。为什么Message的大小为 4,尽管它在枚举中包含一个整数和一个整数,每个整数的大小为 4。如果sizeof(Message)至少为 8,这对我来说是合乎逻辑的。
但是为什么只有4个?如何以字节为单位获得消息的实际大小?或者这真的是真实尺寸吗?如果是这样,为什么?
在 C 和 C++ 之间获取消息的大小有区别吗?