Visual Studio 2019中如何禁用单个函数/代码块的编译器优化?
在Visual Studio 2019中禁用单个函数或代码块的编译器优化
你遇到的C2156错误是因为#pragma optimize指令必须放在函数外部,不能在函数体内使用。针对你的需求,有两种可行方案:
禁用单个函数的优化
将#pragma optimize指令放在函数定义的前后,覆盖整个函数的编译优化设置:
// 禁用后续代码的优化 #pragma optimize("", off) void InsertJunkCode() { // 此函数内的所有代码都会禁用编译器优化 // .... Junk Code .... } // 恢复默认优化设置 #pragma optimize("", on) int main() { // ... InsertJunkCode(); // ... }
禁用函数内局部代码块的优化
如果只想禁用函数内某一段代码的优化,可以使用微软特有的__pragma扩展(双下划线开头),它允许在函数内部使用优化控制指令:
__forceinline void InsertJunkCode() { // 禁用当前代码块的优化 __pragma(optimize("", off)) // .... Junk Code .... // 恢复默认优化设置 __pragma(optimize("", on)) } int main() { // ... InsertJunkCode(); // ... }
补充说明
#pragma optimize("", off)中的空字符串表示禁用所有优化选项,如果需要精准控制特定优化项,可以替换为空字符串为具体的优化标志(比如"g"表示禁用全局优化)。- 若仅需禁止函数被内联,单独使用
__declspec(noinline)即可,但这不会禁用其他类型的编译器优化。
内容的提问来源于stack exchange,提问作者gloking
相关产品推荐
相关产品推荐

