如何强制在 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 中,打开菜单时调试断言失败,但发布模式有效,如何解决?