我收到了错误
error: aggregate value used where an integer was expected
Run Code Online (Sandbox Code Playgroud)
在编译此代码时:
#include <stdio.h>
typedef unsigned long U32;
typedef struct hello_s
{
U32 a:8;
U32 b:24;
}hello_t;
int main()
{
hello_t str;
U32 var;
str.a = 0xAA;
str.b = 0xAAA;
var = (U32)str;
printf("var : %lX\n", var);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
有人可以解释错误的含义,以及我做错了什么.
编辑:我知道这是一个愚蠢的事情.我想知道的是为什么编译器会为此而哭泣.为什么它只能将前32位分配给整数.
var = (U32)str;
Run Code Online (Sandbox Code Playgroud)
因为str是结构类型的对象而您无法将结构对象转换为算术类型的对象.C不允许您执行此类转换.
如果要将结构对象作为整数访问,可以创建结构和结构的并集U32.
请注意,公共构造var = *(U32 *) str;在C中是未定义的行为.它违反了别名和对齐规则.
| 归档时间: |
|
| 查看次数: |
12420 次 |
| 最近记录: |