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