gpt4 book ai didi

c - 将整数分配给 C 位域

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

<分区>

如果将整数赋值给带位域的结构,结果是否定义明确?

#include <stdio.h>
#include <stdint.h>

struct my_struct
{
uint8_t a_byte;
float a_float;
uint8_t baz:1;
uint8_t boo:1;
} __attribute__((__packed__));

int main ()
{
struct my_struct foo;
foo.a_byte = 5;
foo.a_float = 3.14159;

foo.boo = 0;
foo.baz = 3; /* this one */

printf ("a_byte = %i\n", foo.a_byte);
printf ("a_float = %f\n", foo.a_float);
printf ("baz = %i\n", foo.baz);
printf ("boo = %i\n", foo.boo);

return 0;
}

使用 gcc -Wall -Wextra main.c 编译,gcc 警告

main.c:19:13: warning: large integer implicitly truncated to unsigned type 
[-Woverflow]
foo.baz = 3;

输出是:

a_byte       = 5
a_float = 3.141590
baz = 1
boo = 0

所以在我的测试中,只有 bit0 被分配给实际的位域,(分配 4 将导致 0)。

avr-gcc(最终目标是 Atmel AVR)甚至没有发出警告,但这种行为是否已定义?

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