在决定应该采用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,如果第一个测试不为真,则甚至不会执行第二个测试.在这种情况下,这用于确保不执行除以零.