gpt4 book ai didi

c - 如何在 Visual C++ IDE 中将 sizeof enum 设为 C 中的 char 大小

转载 作者:太空宇宙 更新时间:2023-11-04 01:06:06 24 4
gpt4 key购买 nike

我在 VC++ 2008 中编写 C 程序,我有以下结构和枚举。

测试.h

#ifndef _TEST_H_
#define _TEST_H_

typedef enum Selection
{
None,
Single,
Multiple
} Selection_T;

typedef struct Test_struct
{
char var1;
char var2;

Selection_T sel;
} Test_struct_T;

#endif

测试.c

#include "stdio.h"
#include "test.h"
Test_struct_T test_obj = { 1, 2, Multiple };

int main()
{
char *pbyte = (char *)&test_obj;

int i=0;
for(i=0;i<sizeof(test_obj);i++)
printf ("%x\n",*(pbyte+i));

getchar();

return 0;
}

我希望 sel 应该从结构中的第 3 个字节开始,但是编译器将枚举视为整数,因此 sel 从第 5 个字节开始(2 个孔)请帮助我使编译器将枚举视为字节,因此 sel 应该从结构的第 3 个字节开始结构。如果有 Pragma,它会对我有用。提前致谢

最佳答案

在 C++11 中你可以声明一个 scoped enumunderlying type int 的默认值除外。例如:

typedef enum Selection: unsigned char
{
None,
Single,
Multiple
} Selection_T;

在 C++ 中,在 C++11 标准或 C 之前,这是不可能的。该实现决定了 enum 的表示。对于 Microsoft 编译器,enum 表示为 int

如果您希望使用单个字节来存储此信息,那么您不能使用 enum 而应该使用 unsigned char

您确实可以打包您的结构,但这有缺点。您现在将有未对齐的数据,并且您的变量仍然是 4 个字节宽。

关于c - 如何在 Visual C++ IDE 中将 sizeof enum 设为 C 中的 char 大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22780042/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com