编程论坛
注册
登录
编程论坛
→
C++教室
内联函数和宏定义时的区别?
newyj
发布于 2008-09-12 20:40, 2713 次点击
内联函数和宏定义都是在编译时替换的
那这 之间有什么区别呢?
除了 宏定义是机械的替换外
还有什么区别 呢
7 回复
#2
守鹤
2008-09-12 23:48
当我们已定义好一个函数时,在主函数执行到此函数时,就会转去执行定义的函数,执行完毕后再返回到主函数执行的语句那里。此过程需要计算机内部做许多处理(如:地址的保存之类),
而内联函数则不同,程序在编译时,将内联函数的代码自动嵌入到主程序的代码中
节省了程序执行时间
#3
newyj
2008-09-13 10:27
谢谢楼上的回答
我是想问问 宏定义和内联函数的原理是否一样?都是在编译期间替换的吗?
还是 宏定义是在编译期间替换,内联函数是在执行期间替换?
#4
p1s
2008-09-13 10:53
宏定义的替换不会被计算机推托,一定是替换的
而内联函数只是我们对编译器的建议,如果该函数规模较大,可能也不会编译为内联函数
感觉如果打算用函数机制的话,还使用函数比较好,如同用宏定义常量和const定义常量的原因类似。
#5
p1s
2008-09-13 11:19
刚才正好在别的论坛看到一个问题,贴出来给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);
}
#6
newyj
2008-09-13 12:08
谢谢楼上热心回答
是不是 除了宏定义比内联函数 更容易出错外 别的就没有什么区别了呢?
就象 用宏定义和内联函数 哪个运行的快些
它们是在什么时候被替换的
#7
PeterOffice
2008-09-13 15:48
关于内联函数的宏定义
宏定义是预处理器在代码优化时直接替换的,而内联函数是在编译期间插入代码.宏定义替换比内联函数执行得早.
宏定义没有类型检查,所以出错率较高.内联函数是经过类型检查的.
#8
leeco
2008-09-13 19:37
他们就是两个东西,非要去对比有什么相同什么不同有什么意思,你这两个东西哪个东西搞不清楚吗?
1