社区
C语言
帖子详情
请问在C语言中inline函数和用macro定义的函数之间有什么区别?
cloudwing13
2005-08-03 06:02:48
请问在C语言中inline函数和用macro定义的函数之间有什么区别?
...全文
1146
7
打赏
收藏
请问在C语言中inline函数和用macro定义的函数之间有什么区别?
请问在C语言中inline函数和用macro定义的函数之间有什么区别?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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++ 的设计者不喜欢预处理器,曾经想尽了办法想使它成为多余的东西。
C语言
--宏
定义
和
inline
学习
编译器使用的是gcc。在学习
C语言
的宏
定义
和
inline
关键字修饰
函数
时,为了能很好的明白二者的
区别
,所以这里就记录下二者在预处理时生成
中
间文件的
区别
。 宏
定义
: 优点:不会生成
中
间代码,在调用处会直接替换掉指定的宏名称 缺点:不会检测传入的参数合法性和参数的类型,只是在调用的位置进行了简单的替换 生成
中
间文件的
区别
1.宏
定义
使用宏的方式很简单,通过关键字#d...
inline
函数
和宏
定义
的
区别
首先#define有很大的好处: 1. 首先谈一下在C
中
使用这种形式宏
定义
的原因,
C语言
是一个效率很高的语言,这种宏
定义
在形式及使用上像一个
函数
,但它使用预处理器实现,没有了参数压栈,代码生成 等一系列的操作,因此,效率很高,这是它在C
中
被使用的一个主要原因。 2. 这种宏
定义
在形式上类似于一个
函数
,但在使用它时,仅仅只是做预处理器符号表
中
的简单替换,因此它不能进行参数有
C语言
inline
和define用法和使用场景上有啥
区别
均用于代码优化,但两者在机制、安全性、调试和系统影响等方面存在本质差异。:减少
函数
调用开销,适合短小且频繁调用的
函数
(如循环内操作)。:编译器可能拒绝内联(如
函数
过大或递归),过度使用同样导致。(每次调用都展开),且替换后的表达式可能增加额外计算(如。宏的全局性易引发重
定义
冲突(如头文件重复包含)。:调试器可直接跟踪
函数
逻辑,错误信息更清晰。❌无类型检查,易引发隐式转换错误(如传递。
中
,确保多文件调用时编译器能内联展开。支持作用域封装,减少命名冲突风险。:无
函数
调用开销(无栈帧操作)。
#define和
inline
的
区别
以下从面试角度讲解
C语言
中
inline
。
C语言
学习(二):define和
inline
#define(宏
定义
)标识符 替换列表(替换列表可以是数,字符串字面量,标点符号,运算符,标识符,关键字,字符常量。注意:替换列表是可以为空的) #define MAXTIME1000 这就
定义
好了一个简单的MAXTIME
定义
,编译器在处理这个代码之前会对MAXTIME进行处理替换为1000。 注:define的
定义
更像是简单的文本替换 让我们来看下面一个列子: #include
C语言
70,038
社区成员
243,247
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章