请问在C语言中inline函数和用macro定义的函数之间有什么区别?

cloudwing13 2005-08-03 06:02:48
请问在C语言中inline函数和用macro定义的函数之间有什么区别?
...全文
1076 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
cloudwing13 2005-08-05
  • 打赏
  • 举报
回复
谢谢各位的解释,现在清楚了
jsjjms 2005-08-04
  • 打赏
  • 举报
回复
jixingzhong(瞌睡虫) -->说得已经很详细了。

不过我要补充的是:对于macro定义,只要你稍微注意一下,

使用还是非常好的,本人就偏爱使用macro定义.

贴一经典代码给你:

include <stdio.h>
#define q(o) a[j]o[j+i+7]o[j-i+31]
int a[39];
void main(int i,int j)
{
for(j=9;--j;i>8?printf("%10d ",a[j]):q(|a)||(q(=a)=i,main(i+1,j),q(=a)=0));
}
gogdo 2005-08-04
  • 打赏
  • 举报
回复
楼上的兄弟们说的很清楚了。

UP
jixingzhong 2005-08-03
  • 打赏
  • 举报
回复
inline函数和用macro定义的函数区别



macro定义

只是很初级的一种代换,实现的功能很单一

而且安全性很差,比如类型错误、括号漏写

都会造成很大的错误,

而且错误不容易被发现,隐患很大



inline函数

内联函数要比前者好很多

功能也要全面很多!

罪主要的是

内联函数能够进行安全检查(比如参数类型 等)




如果在能够使用两着的情况之下

推荐使用 内联



不过有两点要注意:

1 内联 是以代码膨胀为代价的,

不是所有的函数都适合用 内联 方式

要考虑函数的实际情况

2 macro定义 也不是说一无是处了

在合适的时候使用 也许会有意想不到的效果

希望楼主不要因为我的 “建议” 把这个打入冷宫

那我就罪过了 呵呵
ningzhiyu 2005-08-03
  • 打赏
  • 举报
回复
megaboy(惹我?把你打成照片!) (
说得对。
函数有很多属性是宏没有的,还有类型检查。简单的宏替换是没有的
基本上就是函数与宏的区别。

但是inline又具有宏一样的速度。
具体可以gcc的文档 C Extensions -》An Inline Function is As Fast As a Macro
megaboy 2005-08-03
  • 打赏
  • 举报
回复
c89不支持内联函数,C99才支持。

由于inline函数具有内部链接,因此数个文件定义相同名字的内联函数不会发生冲突,而类函数宏就不行,会产生重复定义。

inline函数是真正的函数,可以由语句组成;但类函数宏所作的只是替换,不是真正的函数,当然也不能有语句。
doway 2005-08-03
  • 打赏
  • 举报
回复
宏定义是一种纯粹的文字替换,是从 C 遗留下来的东西。

inline 函数正是 C++ 中用来替代 C 预处理器的东西,C++ 的设计者不喜欢预处理器,曾经想尽了办法想使它成为多余的东西。

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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