C语言宏和函数的区别详解。
⭐️ 往期文章
✨链接1:C语言文件打开关闭详解、文件顺序读写详解。
✨链接2:C语言文件随机读写详解(fseek、ftell、rewind)。
✨链接3:C语言scanf/fscanf/sscnaf和printf/fprintf/sprintf的区别。
✨链接4:C语言打开文件一次既可以读又可以写。
✨链接5:C语言文件结束的判定(feof、ferror)。
⭐️ 宏和函数的区别
#define定义宏 | 函数 | |
---|---|---|
代 码 长 度 |
每次使用时,宏代码都会被插入到程序中,多次使用宏,会让代码变得冗余、重复。虽然我们自己感觉不到,但是当程序进行编译的时候会有一定的开销。 | 函数代码只会有一份,每次调用函数的时候,都调用的是同一份的代码,不会有代码冗余。 |
执 行 速 度 |
速度更快。 | 函数调用和返回存在一些额外的开销,所以相对于宏慢一些。 |
操 作 符 优 先 级 |
带参宏在替换表达式的时候,可能会因为邻近操作符的优先级而发生一些意想不到的结果,所以使用宏的时候要多一些括号。 | 函数在函数调用的时候计算一次,直接会将计算结果传给形参,对于结果更清晰可控。 |
带 有 副 作 用 的 参 数 |
参数可能被宏替换到表达式多个位置,所以带有副作用的表达式求值可能会产生不可预料的后果。 | 函数在函数调用的时候只计算一次,不会有副作用问题。 |
参 数 类 型 |
宏本质上是替换,所以任意数据类型都会原封不动的替换到指定位置,可以使用于任何参数类型。 | 函数的参数是事先声明好的,如果参数类型不同,就需要不同的函数,即使他们执行的任务是相同的。 |
调 试 |
宏是不方便调试的。 | 函数是可以逐语句调试的。 |
递 归 |
宏不可以递归。 | 函数是可以递归的。 |
潜规则:宏一般是大写,函数名一般是小写。
C语言宏和函数的区别详解。相关推荐
- jQuery height()、innerHeight()、outerHeight()函数的区别详解
参考来源:http://www.jb51.net/article/84897.htm 代码示例(可复制到编辑器直接打开): 1 <!DOCTYPE html> 2 <html lan ...
- CSharp(C#)语言_委托和事件区别详解
委托和事件区别详解 委托和事件的概念 委托 事件 委托和事件的作用 委托 事件 委托和事件的区别 委托和事件的详细解答请看C#系列文章 委托和事件代码实践 委托 事件 总结 委托和事件的概念 委托 ...
- c语言宏编译命令大全,C语言宏定义与预编译详解
http://blog.csdn.net/findaway123/article/details/6994203 2011 1.宏定义和函数的区别 -------------------------- ...
- [C语言]宏定义#define的使用详解
一.宏定义定义常量 预定义符号 FILE //进行编译的源文件 LINE //文件当前的行号 DATE //文件被编译的日期 TIME //文件被编译的时间 STDC //如果编译器遵循ANSI C, ...
- 字符数组和字符串的区别,C语言字符数组和字符串区别详解
C 语言中并不存在字符串这个数据类型,而是使用字符数组来保存字符串.那么,字符数组就一定是字符串吗? 不一定,字符数组和字符串千万不要混淆.字符串是一种特殊的字符数组,并且C语言提供了大量适用于字符串 ...
- 关于C语言内存移动函数的写法详解
------------------------------------------------------------------------------------------- 注:转帖自周立功 ...
- C语言中的函数与数组详解
C语言中,不能被其他源文件调用的函数称为内部函数,也称为静态函数.内部函数由static关键字来定义,形式为:static [数据类型] 函数名([参数]).static是对函数作用范围的限定,限定该 ...
- javascript 用函数语句和表达式定义函数的区别详解
通常我们会看到以下两种定义函数的方式: // 函数语句 function fn(str) {console.log(str); }; // 表达式定义 var fnx=function(str) {c ...
- php和c语言的字符数组中,字符数组和字符串的区别,C语言字符数组和字符串区别详解...
C 语言中并不存在字符串这个数据类型,而是使用字符数组来保存字符串.那么,字符数组就一定是字符串吗? 对于这个问题,大多教科书中的回答是"是".其实不然,字符数组和字符串是完全不相 ...
最新文章
- 2021年中国工业互联网安全大赛核能行业赛道writeup之usb流量分析
- [51nod1678]lyk与gcd问题
- 深度学习材料:从感知机到深度网络A Deep Learning Tutorial: From Perceptrons to Deep Networks
- Thinkphp5.0上传图片与运行python脚本
- 1005. 继续(3n+1)猜想 (25)
- 经典排序算法(9)——桶排序算法详解
- 使用RichTextBox控件实现系统剪切板功能
- java oauth2登录以及权限_还得看 Java!Gitee 4月最火 Java 项目大盘点
- Path of Equal Weight (30 分)
- C++ QQ游戏 连连看外挂 内存挂入门
- 一文教会你导出微信聊天记录
- 12V转5V原理图(LM2596)
- 计算机现在追寻谁的原理,一路追寻-CS考研经验总结_计算机与软件_考研论坛(kaoyan.com)...
- idea常用的搜索方式
- C++一步解决cls闪烁问题
- matlab 周期卷积,matlab连续时间信号卷积和离散时间信号卷积程序
- 第一个爬虫项目-爬取唯美小姐姐网站
- uniApp使用uni.chooseAddress()获取微信收货地址
- 第三章 C语言运算符,表达式,序列点,类型转换
- 基于自定义gym环境的强化学习