1.
宏作的是简单的字符串替换
(
注意是字符串的替换
,
不是其余类型参数的替换
),
而函数的参数的传递
,
参数是有数据类型的
,
能够是各类各样的类型
.
2.
宏的参数替换是不经计算而直接处理的
,
而函数调用是将实参的值传递给形参
,
既然说是值
,
天然是计算得来的
.
3.
宏在编译以前进行
,
即先用宏体替换宏名
,
而后再编译的
,
而函数显然是编译以后
,
在执行时
,
才调用的
.
所以
,
宏占用的是编译的时间
,
而函数占用的是执行时的时间
.
4.
宏的参数是不占内存空间的
,
由于只是作字符串的替换
,
而函数调用时的参数传递则是具体变量之间的信息传递
,
形参做为函数的局部变量
,
显然是占用内存的
.
5.
函数的调用是须要付出必定的时空开销的
,
由于系统在调用函数时
,
要保留现场
,
而后转入被调用函数去执行
,
调用完
,
再返回主调函数
,
此时再恢复现场
,
这些操做
,
显然在宏中是没有的
.
如今来看内联函数
:
所谓
"
内联函数
"
就是将很简单的函数
"
内嵌
"
到调用他的程序代码中
,
只样作的目的是为了不上面说到的第
5
点
,
目的旨在节约下本来函数调用时的时空开销
.
但必须注意的是
:
做为内联函数
,
函数体必须十分简单
,
不能含有循环、条件、选择等复杂的结构,不然就不能作为内联函数了。事实上,即使你没有指定函数为内联函数,有的编译系统也会自动将很简单的函数做为内联函数处理;而对于复杂的函数,即使你指定他为内联函数,系统也不会理会的。