C 在第一次求值后始终具有相同值的if语句的优化

C 在第一次求值后始终具有相同值的if语句的优化,c,compilation,C,Compilation,C语言中是否有一些宏或优化技巧可以告诉程序:这个if语句可能是真的,也可能是假的,但在第一次求值后它的值总是相同的,例如: 假设你想做一个程序,首先解析一些参数,然后在很长的一段时间内,每次迭代你都必须以某种方式显示一些信息(由给定的参数选择),所以每次你都会问是否(给定的参数->以这种方式打印信息),或者(以另一种方式打印信息),但是这个条件将始终为true或false,因为解析部分位于第一位,当您在while中输入时无法更改。如果检查条件很昂贵,并且您知道必须循环多少次,那么您可以执行此操作

C语言中是否有一些宏或优化技巧可以告诉程序:这个if语句可能是真的,也可能是假的,但在第一次求值后它的值总是相同的,例如:
假设你想做一个程序,首先解析一些参数,然后在很长的一段时间内,每次迭代你都必须以某种方式显示一些信息(由给定的参数选择),所以每次你都会问是否(给定的参数->以这种方式打印信息),或者(以另一种方式打印信息),但是这个条件将始终为true或false,因为解析部分位于第一位,当您在while中输入时无法更改。

如果检查条件很昂贵,并且您知道必须循环多少次,那么您可以执行此操作

if(Time_expensive_condition_check){
    while(number_of_iterations){
        //your code here
        number_of_iterations = number_of_iterations - 1
    }
}

但是如果你的条件检查没有时间开销,而且只有O(1),那么就没有更多的优化,因为在每次迭代中,你必须检查是停止还是继续循环。

这种事情不是通过改变编译器优化代码的方式来管理的。最好使用标准的C代码——例如,变量来控制测试的频率,并在需要时保存以前的结果。它独立于编译器优化,并保证与所有编译器和优化设置一起工作(假设编译器正确符合适用的C标准)。