| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2692 人关注过本帖
标题:内联函数和宏定义时的区别?
只看楼主 加入收藏
newyj
Rank: 2
等 级:新手上路
威 望:3
帖 子:542
专家分:0
注 册:2008-1-4
收藏
 问题点数:0 回复次数:7 
内联函数和宏定义时的区别?
内联函数和宏定义都是在编译时替换的
那这 之间有什么区别呢?
除了 宏定义是机械的替换外
还有什么区别 呢
搜索更多相关主题的帖子: 内联 函数 定义 
2008-09-12 20:40
守鹤
Rank: 4
来 自:山東臨沂
等 级:贵宾
威 望:12
帖 子:337
专家分:0
注 册:2008-6-20
收藏
得分:0 
当我们已定义好一个函数时,在主函数执行到此函数时,就会转去执行定义的函数,执行完毕后再返回到主函数执行的语句那里。此过程需要计算机内部做许多处理(如:地址的保存之类),

而内联函数则不同,程序在编译时,将内联函数的代码自动嵌入到主程序的代码中
节省了程序执行时间
2008-09-12 23:48
newyj
Rank: 2
等 级:新手上路
威 望:3
帖 子:542
专家分:0
注 册:2008-1-4
收藏
得分:0 
谢谢楼上的回答
我是想问问 宏定义和内联函数的原理是否一样?都是在编译期间替换的吗?
还是 宏定义是在编译期间替换,内联函数是在执行期间替换?
2008-09-13 10:27
p1s
Rank: 4
等 级:贵宾
威 望:10
帖 子:454
专家分:3
注 册:2005-11-4
收藏
得分:0 
宏定义的替换不会被计算机推托,一定是替换的
而内联函数只是我们对编译器的建议,如果该函数规模较大,可能也不会编译为内联函数
感觉如果打算用函数机制的话,还使用函数比较好,如同用宏定义常量和const定义常量的原因类似。
2008-09-13 10:53
p1s
Rank: 4
等 级:贵宾
威 望:10
帖 子:454
专家分:3
注 册:2005-11-4
收藏
得分:0 
刚才正好在别的论坛看到一个问题,贴出来给LZ看看,或许有帮助
本人初学C,做题的时候看见这个问题,
#include<stdio.h>
#define X 3-2
 void main()
  {int x;
  x=2*X;
  printf("x=%d",x);
  }
turbo C 运行后发觉结果是 4 而不是我想像中的2*(3-2)=2
我想问问,是什么原因!
望高手赐教···


#define X 3-2
表示用3-2替换X这样一个形式 做的只是替换
实际上 2*X 运行是这样的 2*3-2 结果为4
若想达到楼主所要结果应定义成
#define X (3-2)


不少C程序员使用宏定义,使用宏定义要特别小心,因为宏在预编译阶段会进行替换,这种替换不是智能的,所以宏定义表达式中很多时候你必须加上括弧。在C++中,这种用法被内联函数取代,不会发生预料之外的问题。

inline int X() { return 3 - 2; }
#include<stdio.h>

int main()
{
  int x;
  x = 2 * X();
  printf("x = %d", x);
}
2008-09-13 11:19
newyj
Rank: 2
等 级:新手上路
威 望:3
帖 子:542
专家分:0
注 册:2008-1-4
收藏
得分:0 
谢谢楼上热心回答
是不是 除了宏定义比内联函数 更容易出错外 别的就没有什么区别了呢?
就象 用宏定义和内联函数 哪个运行的快些
它们是在什么时候被替换的
2008-09-13 12:08
PeterOffice
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2008-9-13
收藏
得分:0 
关于内联函数的宏定义
宏定义是预处理器在代码优化时直接替换的,而内联函数是在编译期间插入代码.宏定义替换比内联函数执行得早.
宏定义没有类型检查,所以出错率较高.内联函数是经过类型检查的.
2008-09-13 15:48
leeco
Rank: 4
等 级:贵宾
威 望:10
帖 子:1029
专家分:177
注 册:2007-5-10
收藏
得分:0 
他们就是两个东西,非要去对比有什么相同什么不同有什么意思,你这两个东西哪个东西搞不清楚吗?
2008-09-13 19:37
快速回复:内联函数和宏定义时的区别?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014834 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved