当前位置: 代码迷 >> C++ >> inline函数没展开
  详细解决方案

inline函数没展开

热度:4651   发布时间:2013-02-26 00:00:00.0
inline函数没有展开
今天学习了MD5算法的C源码,里面的几个关键函数是用宏定义的。
因为看过Effective C++,作者建议用内联函数代替宏定义的函数,所以我就写了个相应的版本。
inline UINT32 F(UINT32 x, UINT32 y, UINT32 z) { return (((x) & (y)) | ((~x) & (z))); }

inline void FF(UINT32 &a, UINT32 b, UINT32 c, UINT32 d, UINT32 x, UINT32 s, UINT32 ac)
{
  a += F(b, c, d) + x + (UINT32)ac;
  a = ROTATE_LEFT(a, s);
  a += b;
}

但是我用Ollydbg调试了一下,发现生成的汇编代码并没有展开,还是call形式的,到网上查了一下,有网友说inline只是建议编译器进行展开处理,并不是强制的。
我又用了__forceinline关键字,但发现还是不能展开。
请问如何强制内联呢?

我使用的编译器是VC++ Express 2012
c++ 内联函数 inline

------解决方案--------------------------------------------------------
把优化选项打开,查查有没一个控制展开规模的选项,如果有的话,设一个比较大的值。

一定要确保强制内联就用宏好了。任何事都是有利有弊,适合需求就好。
------解决方案--------------------------------------------------------
inline为优化而生,如果不开优化,是不会做展开的,即使开了优化,也需要编译器觉得展开有利而且能够展开,才会展开。
------解决方案--------------------------------------------------------
http://msdn.microsoft.com/en-us/library/19z1t1wy%28v=vs.71%29.aspx
------解决方案--------------------------------------------------------
引用:
引用:是debug还是release版本的?

引用:把优化选项打开,查查有没一个控制展开规模的选项,如果有的话,设一个比较大的值。

一定要确保强制内联就用宏好了。任何事都是有利有弊,适合需求就好。

我用命令行编译的, 没有使用任何编译选项. 如果要展开是不是要开启什么选项……

-O3 试试
  相关解决方案