是什么使_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/

10-11 16:04