禁用函数或代码块的编译器优化?

问题描述 投票:0回答:1

我想禁用单个函数或代码块的编译器优化。 我在 Visual studio 2019 环境中。

我尝试以下:

__forceinline void InsertJunkCode() {

#pragma optimize("", off)

    .... Junk Code ....

#pragma optimize("", on)

}

...

int main() {

    ...

    InsertJunkCode();

    ...

}
...
Error: C2156   pragma must be outside function
...

有没有办法禁用单个函数或代码块的优化?

c visual-c++ compiler-optimization obfuscation
1个回答
0
投票

optimize pragma 仅适用于整个函数,不适用于任意代码段。因此,oragma 必须出现在任何功能之外。

#pragma optimize("", off)
__forceinline void InsertJunkCode() 
{
    .... Junk Code ....
}
#pragma optimize("", on)

这从文档中可以清楚地看出:

optimize pragma 必须出现在函数外部。它在看到编译指示后定义的第一个函数时生效。

© www.soinside.com 2019 - 2024. All rights reserved.