有没有办法禁用编译器优化特定代码行?

54

在Visual Studio中,有没有一种方法可以禁用特定代码行的编译器优化?


1
你有具体的使用场景吗?也许有其他方法可以实现你想要的。 - clstrfsck
1
通常一行代码会考虑到许多其他代码行的优化 - 因此关闭一行代码的优化似乎没有太多意义。例如,可以使用先前行的预计算常量值吗? - AshleysBrain
1
简单的用例是能够在代码行中添加断点,而无需对其余代码进行不优化的运行。 - john16384
2个回答

150

不行。

只能使用优化编译指示符逐个函数进行优化。

 #pragma optimize( "[optimization-list]", {on | off} )

优化指示必须出现在函数之外,并且在看到指示后定义的第一个函数起作用。on和off参数用于打开或关闭优化列表中指定的选项。

用法:

#pragma optimize( "", off )
.
.
.
#pragma optimize( "", on ) 

3
只是想补充一下,[optimization-list] 为空也完全没有问题。 - Mo0gles
1
我在godbolt上尝试了clang、gcc、arm和msvc,并使用-O2进行了测试,唯一受影响的似乎是MSVC。描述有点像是一次性使用的东西,但你可以在函数之前关闭优化,然后立即重新开启它们。 - JoeManiaci

9
您可以使用这个优化编译指示来在函数层面上控制这一点。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接