众所周知,以下代码将由所有合理的编译器优化:
const int a = 3;
const int b = 42;
if (a == b)
{
do_something();
}
Run Code Online (Sandbox Code Playgroud)
如果两个常量相同,if则省略并始终调用函数,如果它们不同,则省略整个块.
但是,在某些情况下,重要的是不要优化此代码,因为程序本身可以在运行之前进行修改.例如,二进制文件位于闪存中,可由外部程序访问,当然两者的地址const是固定的.(在嵌入式中有意义).
我正在考虑使用#pragma,但这不是C标准的一部分.
另一种方法是使用const volatile.这是否可以保证适用于所有符合标准的编译器?
本const volatile应该做的伎俩,因为比较需要一两个"读" volatile变量-和标准保证了读取将具有可观察到的副作用进行治疗.
因此,他们不能只是被优化掉.
我必须问,你试图解决的问题需要这个解决方案吗?解释问题可能会让我们提供您可能没有考虑过的建议和解决方案,这些建议和解决方案不需要这种跳跃式跳跃.