带参宏和内联函数

**宏可以带参数(参数是形参),称为带参宏。**宏和函数各有千秋,各有优劣。总的来说,如果代码比较多用函数适合而且不影响效率;但是对于那些只有一两句话的函数开销就太大了,适合用带参宏。但是用带参宏又有缺点:不检查参数类型。

示例:MAX宏,三目运算符求2个数中较大的一个 #define MAX(a, b) (((a)>(b)) ? (a) : (b)) 。
示例:用宏定义表示一年中有多少秒 #define SEC_PER_YEAR (3652460*60UL) 注意:当一个数字直接出现在程序中时,默认是int类型,一年有多少秒,这个数字刚好超过了int类型存储的范围,要转成无符号数(用%u打印)

内联函数和inline关键字 (内联函数一般仅仅是为了减少调用开销,并没有特别的实际意义)
(1)内联函数通过在函数定义前加inline关键字实现。
(2)内联函数本质上是函数,所以有函数的优点(内联函数是编译器负责处理的,编译器可以帮我们做参数的静态类型检查);但是他同时也有带参宏的优点(不用调用开销,而是原地展开)。所以几乎可以这样认为:内联函数就是带了参数静态类型检查的带参宏。
(3)当我们的函数内函数体很短(譬如只有一两句话)的时候,我们又希望利用编译器的参数类型检查来排错,我还希望没有调用开销时,最适合使用内联函数。

注意:
宏和inline函数的链接属性为无连接,因为在编译的时候会被展开到原来的函数里面去。

猜你喜欢

转载自blog.csdn.net/weixin_42325069/article/details/84112071