【发布时间】:2021-05-24 14:27:43
【问题描述】:
这个问题专门针对嵌入式系统的 C 编译器,但我确信它可以应用于一般编程。
在一行中编写多步数学表达式而不是将它们分解为等效的单个操作是否有任何好处,反之亦然?
例如是:
int convert(int in){
return (int)(((long)in * 727) / 12) + 9;
}
优于或差于:
int convert(int in){
long out = (long)in;
out *= 727;
out /= 12;
out += 9;
return (int)out;
}
一般来说?
我的直觉是单行表达式可能更容易让编译器优化,但我不编写编译器,所以我不确定。
【问题讨论】:
-
只要看一下两者的机器码,你就会发现有什么不同。
-
浮点代码存在差异。 C 标准允许实现在评估表达式时使用额外的精度,但不允许在赋值或强制转换中使用。