如何在Visual C ++上强制在发布模式下创建函数

时间:2011-12-09 18:07:19

标签: c++ visual-c++

  

可能重复:
  Is it possible to force a function not to be inlined?

我有这个类方法,由于在Visual C ++上的Release模式中进行了优化,实际上并没有创建(该函数只是在调用函数中“嵌入”,没有正确的prolog和epilog)。如何告诉编译器创建独立函数?

2 个答案:

答案 0 :(得分:4)

您可以在VC ++中使用pragma

#pragma auto_inline(off)

void non_inlined_func() { /* ... */ }

#pragma auto_inline() // returns to previous state

请参阅the documentation here

答案 1 :(得分:3)

这称为inline函数。如果您要链接该模块,可以将实现移动到cpp文件,因此它在外部不可见。这样,任何试图使用它的模块都必须调用它。

您也可以禁用将编译器标志“内联函数扩展”设置为Only __inline (/Ob1)以阻止当前模块中的inlining,假设您没有将其标记为inline

或使用:

#pragma auto_inline(off)
void foo()
{
}
#pragma auto_inline()

编辑:

我首先列出了我的第一个变体,因为这是正确的方法。您应该让优化器尽其所能来加速代码。如果它在你自己的模块中被内联(或者其他的,因为汇编的代码在你的二进制文件中仍然可见),这对你来说无关紧要,但是如果你真的必须这样做,那就选择第一个选项。