函数的宏定义

作者: Leon_Geo | 来源:发表于2019-03-04 07:41 被阅读34次

首先给大家普及一个知识点:C标准库里的每一个库函数都有一个同名的宏定义。当然,这对你们程序的正确运行没有影响。但为什么要为每一个函数定义一个同名宏呢?原因在于在一些反复调用同一函数的场合,编译器可以用函数宏代替函数使之内嵌到程序里,进而避免了因反复调用函数而带来的保存、恢复现场的开支,使程序整体运行更快。

当然,有的同学会问:这确实是函数宏的一个优势,但如果程序中使用了函数指针,或者因为便于后续的程序调试,我就是要调用函数本尊。那我该怎么办呢?

方法有二:

  1. 用小括号将函数名括起来。因为这样一来使得它在语法形式上不符合宏定义,但却符合函数调用的语法。

  2. 利用预编译指令#undef取消对某函数名的宏定义

  • 以abs()为例:
#include <stdlib.h>
int i;
unsigned a;
...
a = abs(i);//abs既可能是函数也可能是宏
a = (abs)(i);//调用abs函数

#undef abs
a = abs(i);//调用abs函数

===========我是华丽的分割线===========


更多知识:
点击关注专题:嵌入式Linux&ARM

或浏览器打开:https://www.jianshu.com/c/42d33cadb1c1

或扫描二维码:

相关文章

  • 准备:回顾c

    宏定义 关键字 define 定义一个常量的方法(即宏定义) 带参数的宏定义 宏函数的定义 使用宏函数的好处是,不...

  • 预处理面——宏是危险的(inline)

    宏是危险的 宏可以充当函数使用,但又不是真正的函数。宏展开体属于函数体出现时的定义,并不是函数真实调用时的定义。 ...

  • 2018-11-07 宏定义提高可读性

    使用宏定义封装判断条件和读写函数,使代码可读性提高不少。带参数的宏定义,参数只能全词匹配。 明天继续函数和宏定义封装。

  • 10/19

    今天老师讲了预处理命令,宏定义分为无参宏定义,带参宏定义和条件编译。宏定义包括宏名和宏展开,和函数相比预处理有很多...

  • iOS pch中定义使用宏定义函数和代码块

    一、objective-C项目pch文件中定义函数和代码块 使用宏定义函数实现 使用宏定义代码块实现 二、swif...

  • iOS 如何在其他类中调用本类的方法

    宏定义 - 传递函数、参数

  • 函数的宏定义

    首先给大家普及一个知识点:C标准库里的每一个库函数都有一个同名的宏定义。当然,这对你们程序的正确运行没有影响。但为...

  • 宏定义函数与内联函数

    宏定义函数 在c程序中,可以使用宏定义函数代替简单的函数,这样提高程序效率,预处理器用复制宏代码的方式代替函数调用...

  • C++ ----带默认形参的函数,inline(),模板函数,动

    带有默认值形参的函数 inline 函数 和宏定义的区别,宏定义原样替换,inline(),先进行运算,后替换 ...

  • ios宏的总结

    宏定义为对象宏和函数宏,对象宏通常是对一些简单的对象进行替换,如#define M_PI 3.1415,函数宏(在...

网友评论

    本文标题:函数的宏定义

    本文链接:https://www.haomeiwen.com/subject/byjxuqtx.html