我正在开发一个依赖于编译器优化的项目,但我需要一些不被GCC优化的代码。这可能吗?
答案 0 :(得分:28)
GCC 4.4具有以下属性:
int foo(int i) __attribute__((optimize("-O3")));
答案 1 :(得分:18)
#pragma GCC optimize ("whatever")
。我还建议用#pragma GCC push_options
和#pragma GCC pop_options
包装特定代码,该代码使用此编译指示进行注释。第一个将保存更改之前的选项,之后将恢复它们,其余代码将使用全局选项进行编译。
有关任何字符串的详细信息,您应该查看gcc文档,这里是最重要的部分:Arguments can either be numbers or strings. Numbers are assumed to be an optimization level. Strings that begin with O are assumed to be an optimization option, while other options are assumed to be used with a -f prefix.
。
这意味着如果您不希望对特定代码进行任何优化,那么 应该只是“0”。
答案 2 :(得分:3)
您可以将该段代码放入不同的文件中并进行编译而不进行优化。
或尝试使用#pragma指令:
#pragma optimize level=0
甚至可以通过以下方式更好地启动和停止优化:
#pragma OPTIMIZE ON
#pragma OPTIMIZE OFF