⭐️ 往期文章

✨链接1:C语言文件打开关闭详解、文件顺序读写详解。
✨链接2:C语言文件随机读写详解(fseek、ftell、rewind)。
✨链接3:C语言scanf/fscanf/sscnaf和printf/fprintf/sprintf的区别。
✨链接4:C语言打开文件一次既可以读又可以写。
✨链接5:C语言文件结束的判定(feof、ferror)。


⭐️ 宏和函数的区别

#define定义宏 函数



每次使用时,宏代码都会被插入到程序中,多次使用宏,会让代码变得冗余、重复。虽然我们自己感觉不到,但是当程序进行编译的时候会有一定的开销。 函数代码只会有一份,每次调用函数的时候,都调用的是同一份的代码,不会有代码冗余。



速度更快。 函数调用和返回存在一些额外的开销,所以相对于宏慢一些。





带参宏在替换表达式的时候,可能会因为邻近操作符的优先级而发生一些意想不到的结果,所以使用宏的时候要多一些括号。 函数在函数调用的时候计算一次,直接会将计算结果传给形参,对于结果更清晰可控。







参数可能被宏替换到表达式多个位置,所以带有副作用的表达式求值可能会产生不可预料的后果。 函数在函数调用的时候只计算一次,不会有副作用问题。



宏本质上是替换,所以任意数据类型都会原封不动的替换到指定位置,可以使用于任何参数类型。 函数的参数是事先声明好的,如果参数类型不同,就需要不同的函数,即使他们执行的任务是相同的。

宏是不方便调试的。 函数是可以逐语句调试的。

宏不可以递归。 函数是可以递归的。

潜规则:宏一般是大写,函数名一般是小写。

C语言宏和函数的区别详解。相关推荐

  1. jQuery height()、innerHeight()、outerHeight()函数的区别详解

    参考来源:http://www.jb51.net/article/84897.htm 代码示例(可复制到编辑器直接打开): 1 <!DOCTYPE html> 2 <html lan ...

  2. CSharp(C#)语言_委托和事件区别详解

    委托和事件区别详解 委托和事件的概念 委托 事件 委托和事件的作用 委托 事件 委托和事件的区别 委托和事件的详细解答请看C#系列文章 委托和事件代码实践 委托 事件 总结 委托和事件的概念 委托   ...

  3. c语言宏编译命令大全,C语言宏定义与预编译详解

    http://blog.csdn.net/findaway123/article/details/6994203 2011 1.宏定义和函数的区别 -------------------------- ...

  4. [C语言]宏定义#define的使用详解

    一.宏定义定义常量 预定义符号 FILE //进行编译的源文件 LINE //文件当前的行号 DATE //文件被编译的日期 TIME //文件被编译的时间 STDC //如果编译器遵循ANSI C, ...

  5. 字符数组和字符串的区别,C语言字符数组和字符串区别详解

    C 语言中并不存在字符串这个数据类型,而是使用字符数组来保存字符串.那么,字符数组就一定是字符串吗? 不一定,字符数组和字符串千万不要混淆.字符串是一种特殊的字符数组,并且C语言提供了大量适用于字符串 ...

  6. 关于C语言内存移动函数的写法详解

    ------------------------------------------------------------------------------------------- 注:转帖自周立功 ...

  7. C语言中的函数与数组详解

    C语言中,不能被其他源文件调用的函数称为内部函数,也称为静态函数.内部函数由static关键字来定义,形式为:static [数据类型] 函数名([参数]).static是对函数作用范围的限定,限定该 ...

  8. javascript 用函数语句和表达式定义函数的区别详解

    通常我们会看到以下两种定义函数的方式: // 函数语句 function fn(str) {console.log(str); }; // 表达式定义 var fnx=function(str) {c ...

  9. php和c语言的字符数组中,字符数组和字符串的区别,C语言字符数组和字符串区别详解...

    C 语言中并不存在字符串这个数据类型,而是使用字符数组来保存字符串.那么,字符数组就一定是字符串吗? 对于这个问题,大多教科书中的回答是"是".其实不然,字符数组和字符串是完全不相 ...

最新文章

  1. 2021年中国工业互联网安全大赛核能行业赛道writeup之usb流量分析
  2. [51nod1678]lyk与gcd问题
  3. 深度学习材料:从感知机到深度网络A Deep Learning Tutorial: From Perceptrons to Deep Networks
  4. Thinkphp5.0上传图片与运行python脚本
  5. 1005. 继续(3n+1)猜想 (25)
  6. 经典排序算法(9)——桶排序算法详解
  7. 使用RichTextBox控件实现系统剪切板功能
  8. java oauth2登录以及权限_还得看 Java!Gitee 4月最火 Java 项目大盘点
  9. Path of Equal Weight (30 分)
  10. C++ QQ游戏 连连看外挂 内存挂入门
  11. 一文教会你导出微信聊天记录
  12. 12V转5V原理图(LM2596)
  13. 计算机现在追寻谁的原理,一路追寻-CS考研经验总结_计算机与软件_考研论坛(kaoyan.com)...
  14. idea常用的搜索方式
  15. C++一步解决cls闪烁问题
  16. matlab 周期卷积,matlab连续时间信号卷积和离散时间信号卷积程序
  17. 第一个爬虫项目-爬取唯美小姐姐网站
  18. uniApp使用uni.chooseAddress()获取微信收货地址
  19. 第三章 C语言运算符,表达式,序列点,类型转换
  20. 基于自定义gym环境的强化学习

热门文章

  1. 什么是国产化替代?为什么需要国产化替代?
  2. CNNIC第43次调查报告:个人互联网应用发展状况
  3. HTML 开发中通过 Emmet使用增加开发效率终极篇
  4. R与结构方程模型(1):SEM的核心
  5. idea选择某一列的所有数据快捷键
  6. 如何使用Arduino和HM-10蓝牙模块实现Android App控制LED
  7. android电视无法打开app,新买的电视无法安装第三方软件?方法汇总来了,解决99%的问题...
  8. 数字藏品小程序 数字藏品怎么交易
  9. 内置机械键盘游戏本,你要选iFunk S
  10. 网络项目改造的大致流程