如何强制在 Visual C++ 的发布模式下创建函数 [重复]

Posted

技术标签:

【中文标题】如何强制在 Visual C++ 的发布模式下创建函数 [重复]【英文标题】:How do I force a function to be created in Release mode on Visual C++ [duplicate] 【发布时间】:2011-12-09 18:07:19 【问题描述】:

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

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

【问题讨论】:

“内联”是通常使用的术语(与“嵌入”相对) 回答了这个问题:***.com/questions/3329214/… @Rhuidean 谢谢。请投票结束问题。 为什么需要这个?你真正想解决什么问题? 【参考方案1】:

你可以在 VC++ 中使用pragma

#pragma auto_inline(off)

void non_inlined_func()  /* ... */ 

#pragma auto_inline() // returns to previous state

见the documentation here。

【讨论】:

【参考方案2】:

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

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

或使用:

#pragma auto_inline(off)
void foo()


#pragma auto_inline()

编辑:

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

【讨论】:

以上是关于如何强制在 Visual C++ 的发布模式下创建函数 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 安装项目:如何强制卸载程序以管理员模式运行?

如何在 Visual Studio (C++) 中设置发布分析

如何在 Visual C++ 2015 中的 C++ 强制转换运算符的尖括号内保留空格?

如何在 Windows 上使用 Visual C++ 强制加载链接库

如何在 Visual Studio 2019 C++ 中创建非虚拟文件夹

在 Visual C++ 2005 中开发的 Visual C++ 项目 - 在 Visual C++ 2010 中,打开菜单时调试断言失败,但发布模式有效,如何解决?