我正在开发一个依赖于编译器优化的项目,但我需要确保某些代码不被GCC优化。这可行吗?
我正在开发一个依赖于编译器优化的项目,但我需要确保某些代码不被GCC优化。这可行吗?
GCC 4.4有一个相关的属性:
int foo(int i) __attribute__((optimize("-O3")));
自从4.4版本以来,GCC引入了#pragma GCC optimize ("whatever")
。我建议在使用此指示符的代码周围加上#pragma GCC push_options
和#pragma GCC pop_options
。前者会保存更改之前的选项,后者会在之后恢复这些选项,并使得剩余代码以全局选项编译。
关于whatever字符串的详细信息,请查阅GCC文档,以下是其中最重要的部分:参数可以是数字或字符串。数字被假设为优化级别。以O开头的字符串被假设为优化选项,而其他选项则被假设为需要使用-f前缀。
.
这意味着,如果您不希望对特定代码进行任何优化,则应将whatever设置为"0"。
#pragma GCC
以保持兼容性。 - xdevs23您可以将这段代码放入不同的文件中,并在没有优化的情况下进行编译。
或者尝试使用#pragma指令:
#pragma optimize level=0
#pragma OPTIMIZE ON
#pragma OPTIMIZE OFF
__attribute__
似乎可以工作。 - Jan Wielemaker