众所周知,所有明智的编译器都会优化以下代码:
const int a = 3;
const int b = 42;
if (a == b)
{
do_something();
}
如果两个常量相同,if
则省略并始终调用函数,如果它们不同,则省略整个块。
但是,在某些情况下,不要优化此代码很重要,因为程序本身可以在运行之前进行修改。例如二进制文件位于闪存中,可以被外部程序访问,当然这两个const
s的地址是固定的。(在嵌入式中有意义)。
我正在考虑使用#pragma
,但这不是 C 标准的一部分。
另一种方法是使用const volatile
. 这是否保证适用于所有符合标准的编译器?