是什么使_Bool 1类型的变量产生值,即使我们为其分配大于1的值也是如此。
例如:
_Bool tmp = 10;
printf("%x , %lu", tmp, sizeof(tmp));
这将打印1、1。试图了解是什么使Byte大小的变量充当单个位,并且当分配的值> 1且LSB 0仍转换为1时。
最佳答案
是什么使_Bool 1类型的变量产生值,即使我们为其分配大于1的值也是如此。编译器可以。
例如在ARM(arm-none-eabi-gcc)上:
#include "stdio.h"
#include "stdbool.h"
int main()
{
_Bool tmp = 10;
printf("%x , %lu", tmp, sizeof(tmp));
return 0;
}
编译为:
.LC0:
.ascii "%x , %lu\000"
main:
stmfd sp!, {fp, lr}
add fp, sp, #4
sub sp, sp, #8
mov r3, #1
strb r3, [fp, #-5]
ldrb r3, [fp, #-5] @ zero_extendqisi2
mov r2, #1
mov r1, r3
ldr r0, .L3
bl printf
mov r3, #0
mov r0, r3
sub sp, fp, #4
ldmfd sp!, {fp, lr}
bx lr
.L3:
.word .LC0
您可以在指令
mov r3, #1
中看到编译器按照标准指定的那样将初始化值10
直接转换为1
。关于c - _Bool如何实现?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59151897/