函数的宏定义

首先给大家普及一个知识点: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

或扫描二维码:

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-08 13:15
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-08 10:39
一个证都没&nbsp;我能填什么
程序员小白条:别人有,你为什么没有,还是这个道理,社会就是比较,竞争,淘汰,你要安逸,那么就要做好淘汰的准备
点赞 评论 收藏
分享
06-12 10:50
门头沟学院 Java
你的不定积分没加C:我怎么在学院群看到了同样的话
点赞 评论 收藏
分享
07-07 14:30
复旦大学 Java
遇到这种人我也不知道说啥了
无能的丈夫:但我觉得这个hr语气没什么问题啊(没有恶意
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务