C/C++:包含int和enum == sizeof(int)的typedef结构的大小?
发布时间:2020-12-16 06:45:54 所属栏目:百科 来源:网络整理
导读:我在我的Ubuntu(i686)上使用 gcc版本4.3.3.我写了一个精简测试程序来描述我缺乏理解和我的问题.程序应该告诉我我实现的结构的大小.所以我有一个消息的typedef结构和一个主要的东西: #include stdio.htypedef struct { int size; enum {token=0x123456}; } M
我在我的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): %dn",sizeof(int)); printf("sizeof(0x123456): %dn",sizeof(0x123456)); printf("sizeof(Message): %dn",sizeof(Message)); printf("sizeof(m): %dn",sizeof(m)); } 在使用gcc编译此源代码时,我收到以下警告,我不明白: $gcc sizeof.c sizeof.c:5: warning: declaration does not declare anything 第5行指的是枚举线.我希望在我创建的每条消息中都有该令牌.我究竟做错了什么?为了摆脱那个警告我需要改变什么? 我的主要包含几个sizeof()调用.当我运行程序时,您可以在输出中看到整数的大小为4,十六进制数的大小为4,但typedef结构消息的大小也是4: $./a.out sizeof(int): 4 sizeof(0x123456): 4 sizeof(Message): 4 sizeof(m): 4 这对我来说非常困惑.为什么Message的大小为4,虽然它包含一个整数和一个枚举中的整数,每个大小为4.如果sizeof(Message)至少为8,那对我来说是合乎逻辑的. 但为什么只有4?如何获取消息字节的实际大小?或者这真的是真正的大小?如果是这样,为什么? 在C和C之间获取消息的大小有区别吗? 解决方法
你没有宣布任何事情:
enum {token=0x123456}; 您的声明类似于: typedef struct { int size; int; } Message; 如果你声明你的结构如下: typedef struct { int size; enum {token=0x123456} e; } Message; 将有两个字段,但e不会被初始化为任何内容.您需要为每个实例手动设置它:message.e = token. 实现你想要的正确方法是在C中使用构造函数: struct Message { int size; int token; Message() : token(0x123456) {}; }; 或者C 11中的非静态数据成员初始值设定项: struct Message { int size; int token=0x123456; }; 无法在C中的struct声明中初始化字段. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |