大佬教程收集整理的这篇文章主要介绍了C/C++:包含int和enum == sizeof(int)的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)); }
在使用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.
struct message { int size; int token; message() : token(0x123456) {}; };
或者C 11中的非静态数据成员初始值设定项:
struct message { int size; int token=0x123456; };
无法在C中的struct声明中初始化字段.
以上是大佬教程为你收集整理的C/C++:包含int和enum == sizeof(int)的typedef结构的大小?全部内容,希望文章能够帮你解决C/C++:包含int和enum == sizeof(int)的typedef结构的大小?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。