内联函数的体内不能有循环语句

lettermail2 2003-08-03 08:06:53
书本上说 内联函数的体内不能有循环语句
为什么我下面的程序有,但是编译时不提示错误的?
#include <iostream.h>
#include <stdio.h>
inline int add(int x)
{ int y=0;
while(x>0)
{y=y+x;
x--;
}
return y;
}

main()
{ int c;
int a=100;
c=add(a);
printf("%d",c);

}
...全文
584 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
babynuaa 2003-08-03
  • 打赏
  • 举报
回复
用VC6,不一定将inline当作内联函数,编译系统是会决定是否展开,用__forceinline,可能性相对较大。
beyondtkl 2003-08-03
  • 打赏
  • 举报
回复
是可以运行
知道书上为什么说 内联函数不要有循环(递归,嵌套)么
首先你要了解内联函数,它类似于宏定义(,,
所以它具有很高的效率 而且它的展开也确实跟宏一样的
就是在调用的时候
像宏一样直接在被调用出进行展开,注意,这里没有像一般函数的调用那样
需要进行一份函数体的拷贝,节约了时间,所以提高了效率,
但是 它是在每一处调用它的地方进行用函数本体展开的,所以整个代码在运行的时候会有一点膨胀,所以内联函数体不能过大

如果 你现在在里面加上循环(递归等),那么它也就失去内联的意义了,
所以 书上建议不用
titi_lima 2003-08-03
  • 打赏
  • 举报
回复
我将程序做了反汇编(VC6),可见编译器确实将add当作了一般函数。
15: c=add(a);
0040103F mov eax,dword ptr [ebp-8]
00401042 push eax
00401043 call @ILT+0(add) (00401005)
00401048 add esp,4
0040104B mov dword ptr [ebp-4],eax
dzqsuper 2003-08-03
  • 打赏
  • 举报
回复
那你这个能运行吗
friendkey 2003-08-03
  • 打赏
  • 举报
回复
编译器会自动把它当成一般函数处理

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧