C如何执行其IF语句?

sri*_*ram 2 c compiler-construction

booleanC编程语言中没有类型,但是C语言如何IF/Else变为真和假?

幕后发生了什么?

Lin*_*cer 6

在决定应该采用if/ elsestatement语句的哪个分支之前,编译器不会将条件表达式转换为布尔值.相反,它会生成汇编程序指令,就像您在汇编程序中编写程序一样.

一个简单的例子:

if (x > y)
{
   // Do something
}
else
{
   // Do something else
}
Run Code Online (Sandbox Code Playgroud)

可以翻译成(使用虚构的微控制器):

    CMP R12,R13
    BLE label1
    // Do something
    JMP label2
label1:
    // Do something else
label2:
Run Code Online (Sandbox Code Playgroud)

如果条件更简单,如:

if (x)
Run Code Online (Sandbox Code Playgroud)

C语言会考虑x到是真的,如果它是非零和虚假,否则.

如果条件包含||和/或&&运算符,编译器将生成使测试短路的代码.换句话说,对于表达式x != 0 && a/x == y,如果第一个测试不为真,则甚至不会执行第二个测试.在这种情况下,这用于确保不执行除以零.