c - 三元运算符在编译过程中是否扩展为 if-else block ?

标签 c assembly ternary-operator

在编译过程中,当c代码转换为汇编语言时,三元运算符是否转换为if-else block ?

最佳答案

简短回答:不。

机器指令(或汇编,粗略地说,是人类更容易理解的机器指令的高级表示)没有 if/else构造。最多会有某种形式的条件跳转。

实际上,if/else 构造最初可能会映射到使用条件跳转的代码。并且三元 ?: 的工作至少在最初可能会以相同的方式映射。

但是,编译器会对代码进行一些相当高级的优化。根据 CPU 的需要,优化器可能会完全重新排序或删除一些具有条件跳转的代码块,并使用其他机制将其替换为产生相同结果的其他代码。

关于c - 三元运算符在编译过程中是否扩展为 if-else block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44093300/

相关文章:

c - Microchip PIC16F1829深度 sleep

c++ - x86 汇编比较参数

assembly - YASM [symbol + $$]有效地址在平面二进制格式中太复杂

c# - 带后缀增量的三元运算符赋值

operators - 三元运算符什么时候比简单的 if-else block 更差?

c - 为变量赋值的更好方法

c - 如何在 C 语言中对性能优化进行单元测试?

php - PHP 类的 Apache2 模块

linux - 中断发生时,或者进程调度时,是否需要保存标志寄存器?

javascript - 具有多个操作的三元运算符