硬编码的数学运算是在Xcode中Objective-C的编译时还是运行时执行的?

硬编码的数学运算是在Xcode中Objective-C的编译时还是运行时执行的?,objective-c,ios,xcode,clang,optimization,Objective C,Ios,Xcode,Clang,Optimization,如果我为数学运算编写一行代码,例如: x = 109.0f*768.0f/320.0f; 结果(261.6f)是在编译时还是运行时计算的?换句话说,Xcode的优化是否认识到硬编码数学运算的结果总是相同的,因此可以在编译时预先计算?它是在编译时计算的,至少使用以Xcode为目标的iOS。此功能: float test() { float x = 109.0f*768.0f/320.0f; return x; } 编译以下三条指令: movw r0, #52429 mov

如果我为数学运算编写一行代码,例如:

x = 109.0f*768.0f/320.0f;

结果(261.6f)是在编译时还是运行时计算的?换句话说,Xcode的优化是否认识到硬编码数学运算的结果总是相同的,因此可以在编译时预先计算?

它是在编译时计算的,至少使用以Xcode为目标的iOS。此功能:

float test() {
    float x = 109.0f*768.0f/320.0f;
    return x;
}
编译以下三条指令:

movw    r0, #52429
movt    r0, #17282
bx  lr
C标准不要求在编译时计算值。事实上,如果您设置
FENV_ACCESS
pragma,则在某些情况下,在编译时禁止对其进行计算。启用
FENV\u访问
不会影响此测试用例中生成的指令。

@rob您使用的“优化级别”值是多少?当“优化级别=无”时,优化是否仍然完成?它是-O0(无优化)。