gpt4 book ai didi

c - 未初始化的 _Bool 变量或结构字段行为异常

转载 作者:太空宇宙 更新时间:2023-11-03 23:20:31 24 4
gpt4 key购买 nike

下面的代码:

_Bool field0;
char field1;

printf("fieldX: [%d]\t[%d]\n", field0, field1);
printf("fieldX ? 1 : 0: [%d]\t[%d]\n", field0 ? 1 : 0, field1 ? 1 : 0);
printf("!fieldX: [%d]\t[%d]\n", !field0, !field1);
printf("!!fieldX: [%d]\t[%d]\n", !!field0, !!field1);

给出以下输出:

fieldX:                [165]  [165]
fieldX ? 1 : 0: [165] [1]
!fieldX: [164] [0]
!!fieldX: [165] [1]

看起来很令人惊讶,尤其是三元运算符的结果。

用 gcc 4.9.3 和 4.8.3 检查,-O0,没有 -flto。

备注:堆栈先前已使用 0xa5 模式(嵌入式 C 环境)初始化。

最佳答案

使用自动存储访问未初始化的对象会调用未定义的行为。所以这里没有什么奇怪的。

此外,_Bool 对象只能包含两个值:01。允许实现替换 !!boolean_objectboolean_object ? 1 : 0 通过 boolean_object

(另请注意,即使使用 -O0gcc 仍在执行一些优化:例如,它内联调用一次的静态函数。)

关于c - 未初始化的 _Bool 变量或结构字段行为异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40852387/

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