C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了C/C++:包含int和enum == sizeof(int)的typedef结构的大小?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我在我的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));
}

在使用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声明中初始化字段.

大佬总结

以上是大佬教程为你收集整理的C/C++:包含int和enum == sizeof(int)的typedef结构的大小?全部内容,希望文章能够帮你解决C/C++:包含int和enum == sizeof(int)的typedef结构的大小?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。