显式算术,编译器会处理它吗?

vet*_*eta 2 c compilation

有时我会发现通过明确算术来理解代码(对于将来或其他人来说)更容易.例如,如果您从其他地方添加3个值,则写入1 + 2 + 3,而不是单个幻数+6.

这是低效还是编译器会适当地优化/减少它?我在考虑C,但一般来说这是值得担心的吗?

dus*_*uff 5

是.所有有能力的C编译器都会尽可能地执行常量折叠优化,用结果替换常数数学表达式.在大多数编译器中,即使在禁用优化时(例如,-O0)也会应用此类优化.这是一个例子.

此行为不限于C; 大多数其他编译语言也将执行此类优化.解释语言通常不会,因为那里的好处不那么引人注目,并且其中一些可能具有语义,这可能使得不断折叠不安全的优化(例如,允许在内置类型上覆盖基本操作).