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

How do I force a function to be created in Release mode on Visual C++

本文关键字:模式 函数 创建 布模式 Visual C++      更新时间:2023-10-16

可能的重复项:
是否可以强制函数不内联?

我有这个类方法,由于在 Visual C++ 上的发布模式下进行了优化,它实际上并没有被创建(该函数只是"嵌入"在调用者函数中,没有适当的 prolog 和 epilog(。如何告诉编译器创建独立函数?

您可以在 VC++ 中使用pragma

#pragma auto_inline(off)
void non_inlined_func() { /* ... */ }
#pragma auto_inline() // returns to previous state

请参阅此处的文档。

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

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

或使用:

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

编辑:

首先列出了我的第一个变体,因为这是正确的方法。您应该让优化器尽其所能来加速您的代码。它是否内联在你自己的模块中(或其他模块,就此而言,因为组装好的代码在你的二进制文件中仍然可见(,这对你来说并不重要,但如果你真的必须这样做,请选择第一个选项。