C语言中的宏定义与内联函数的使用

大家好,今天给大家介绍C语言中的宏定义与内联函数的使用,文章末尾附有分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!可进群免费领取。

一、宏定义(Macro Definition)

宏定义是C语言预处理器的一种功能,它允许我们为一段代码或一个值定义一个名称,这样在编译前,预处理器会将所有的宏名替换为其定义的内容。

1. 基本语法:

#define 宏名 替换内容

2. 示例:

#define PI 3.14159  
#define AREA(r) (PI * r * r)  
  
int main() {  
    double radius = 5.0;  
    double circleArea = AREA(radius);  
    printf("The area of the circle is: %f\n", circleArea);  
    return 0;  
}

3. 注意事项:

  • 宏定义不是函数,没有函数调用的开销。
  • 宏定义只是简单的文本替换,没有类型检查。
  • 宏定义可能会导致运算符优先级问题,因为预处理器不会考虑运算符的优先级。
  • 使用宏时要小心,避免产生副作用,例如:#define SQUARE(x) x * x 可能导致 SQUARE(a++) 产生错误的结果。

二、内联函数(Inline Functions)

内联函数是一种优化技术,通过在编译时将函数体直接插入到函数调用点来避免函数调用的开销。

1. 基本语法:

inline 返回类型 函数名(参数列表) {  
    // 函数体  
}

2. 示例:

inline int Square(int x) {  
    return x * x;  
}  
  
int main() {  
    int a = 5;  
    int result = Square(a);  
    printf("The square of %d is %d\n", a, result);  
    return 0;  
}

3. 注意事项:

  • 内联函数是一种优化技术,但编译器可以选择忽略 inline 关键字。
  • 内联函数通常在头文件中定义,这样每个使用它的源文件都可以看到其定义。
  • 内联函数有类型检查,比宏定义更安全。
  • 内联函数通常适用于小型、频繁调用的函数。

三、比较宏定义与内联函数

  • 宏定义
    • 预处理阶段进行文本替换。
    • 没有类型检查。
    • 可能产生副作用或运算符优先级问题。
    • 通常用于定义常量或简单的代码片段。
  • 内联函数
    • 在编译阶段进行替换。
    • 有类型检查,更安全。
    • 不会产生副作用或运算符优先级问题。
    • 通常用于小型、频繁调用的函数,以提高性能。

四、总结

宏定义和内联函数都是C语言中用于提高代码效率和性能的工具。宏定义在预处理阶段进行文本替换,没有类型检查,可能产生副作用;而内联函数在编译阶段进行替换,有类型检查,更安全,但编译器可以选择忽略 inline 关键字。在选择使用宏定义还是内联函数时,需要根据具体的需求和场景进行权衡。

嵌入式物联网需要学的东西真的非常多,千万不要学错了路线和内容,导致工资要不上去!

分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!

点击找小助理免费领取资料

扫码进群领资料icon-default.png?t=N7T8https://s.pdb2.com/pages/20230519/16QijNiGb32IFIn.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/409430.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

英伟达狂飙,上演大象坐火箭

英伟达市值破 2W 亿 这两天全球资本市场最大的事情就是英伟达(NVDA)公布了财报。 本来市场(分析师)的预期就高,结果财报公布比预期还要高出不少。 NVDA 直接上演「大象坐火箭」,在财报公布后的第一个交易日…

【数据结构与算法】(19)高级数据结构与算法设计之 图 拓扑排序 最短路径 最小生成树 不相交集合(并查集合)代码示例

目录 6) 拓扑排序KahnDFS 7) 最短路径DijkstraBellman-FordFloyd-Warshall 8) 最小生成树PrimKruskal 9) 不相交集合(并查集合)基础路径压缩Union By Size 图-相关题目 6) 拓扑排序 #mermaid-svg-MQhLsXiMwnlUL3q4 {font-family:"trebuchet ms"…

语音转字幕:Whisper模型的功能和使用

🍁 作者:知识浅谈,CSDN签约讲师,CSDN博客专家,华为云云享专家,阿里云专家博主 📌 擅长领域:全栈工程师、爬虫、ACM算法 💒 公众号:知识浅谈 🤞语音…

【k8s资源调度-HPA(自动扩缩容)】

1、HPA可以做什么? 通过观察pod的cpu、内存使用率或自定义metrics指标进行自动的扩容或缩容pod的数量。通常用于Deployment,不适用于无法扩/缩容的对象,如DaemonSet。控制管理器每隔30s(可以通过-horizontal-pod-autoscaler–sync-period修改…

信息系统项目管理师论文分享(质量管理)

水一篇文章。我发现身边考高项的朋友很多都是论文没过,我想着那就把我的论文分享出来,希望能有帮助。 质量管理 摘要 2020年5月,我作为项目经理参加了“某市某医联体的互联网诊疗(互联网医院和远程医疗)平台”的建设…

多表联合分页查询(二)---- springboot整合MybatisPlus分页代码

目录 一、分页配置代码解读(使用MP自带分页)二、Controller层代码解读三、service层代码解读四、Mapper层代码解读五、结果展示 一、分页配置代码解读(使用MP自带分页) package com.minster.yanapi.Config;import com.baomidou.m…

Python 读取txt中的汉字报错

Python读取txt中的汉字报错:UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0xa7 in position 4: illegal multibyte sequence 举例: fileE:/0_MyWork/python_programm/children_name/strich7.txtwith open(file, "r") as file_7str…

LeetCode 1637.两点之间不包含任何点的最宽垂直区域

给你 n 个二维平面上的点 points ,其中 points[i] [xi, yi] ,请你返回两点之间内部不包含任何点的 最宽垂直区域 的宽度。 垂直区域 的定义是固定宽度,而 y 轴上无限延伸的一块区域(也就是高度为无穷大)。 最宽垂直区…

基于jmeter的性能全流程测试

01、做性能测试的步骤 1、服务器性能监控 首先要在对应服务器上面安装性能监控工具,比如linux系统下的服务器,可以选择nmon或者其他的监控工具,然后在jmeter模拟场景跑脚本的时候,同时启动监控工具,这样就可以获得jm…

抖音视频下载工具|视频内容提取软件

引言部分: 针对抖音视频下载需求,我们团队自豪推出一款功能强大的工具,旨在解决用户获取抖音视频繁琐问题的困扰。我们通过基于C#开发的工具,让用户能够轻松通过关键词搜索实现自动批量抓取视频,并根据需求进行选择性批…

Linux——缓冲区封装系统文件操作

📘北尘_:个人主页 🌎个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 文章目录 一、FILE二、封装系统接口实现文件操作1、text.c2、mystdio.c3、mystdio.h 一、FILE 因为IO相…

谷歌收购域名花费了100万美元的确让大家眼红

谷歌斥资100万美元购买了该域名。 卖个好价钱确实让大家眼红,但能不能卖到高价就是另一回事了。 首先,据统计,截至2008年底,我国域名总数达到1680万多个,可用的域名资源几乎无法统计,因为英文的组合太多了…

2024.2.25 在centos8.0安装docker

2024.2.25 在centos8.0安装docker 安装过程比较简单,按顺序安装即可,简要步骤: 一、更新已安装的软件包: sudo yum update二、安装所需的软件包,允许 yum 通过 HTTPS 使用存储库: sudo yum install -y …

经典枚举算法

解析: 首先答案肯定是字符串的某个前缀,然后简单直观的想法就是枚举所有的前缀来判断,我们设这个前缀串长度为 lenx ,str1 的长度为 len1,str2 的长度为 len2,则我们知道前缀串的长度必然要是两个字符串长…

mac拼图软件有哪些?推荐5款拼图软件

mac拼图软件有哪些?在数字图像处理中,拼图软件扮演着至关重要的角色。对于Mac用户来说,选择一款功能强大、操作简便的拼图软件是提升工作效率和创作体验的关键。本文将为你介绍五款优秀的Mac拼图软件,帮助你轻松完成图片拼接、制作…

代码随想录算法训练营day27|39. 组合总和、40.组合总和II

39. 组合总和 如下树形结构如下: 选取第二个数字5之后,剩下的数字要从5、3中取数了,不能再取2了,负责组合就重复了,注意这一点,自己做的时候没想明白这一点 如果是一个集合来求组合的话,就需…

计算机网络-无线通信网

1.各种移动通信标准 1G:第一代模拟蜂窝:频分双工FDD。2G:第二代数字蜂窝 I.GDM(全球移动通信)采用TDMA。II.CDMA(码分多址通信)。2.5G:第2.5代通用分组无线业务GPRS。2.75G&#xf…

Linux--串口屏显示控制实验

一、 实验简介 实验目标:在Linux下通过串口屏显示并控制功能模块的状态和参数 操作系统:Ubuntu 20.04.6 LTS 串口屏:迪文串口屏 DMG48270C043_03W 二、实现代码-- C语言 代码功能就是在Linux下使用串口和TCP,重点在于如何处理好…

linux 文本编辑命令【重点】

目录 vi&vim介绍 vim安装 vim使用 查找命令 find grep 文本编辑的命令,主要包含两个: vi 和 vim vi&vim介绍 作用: vi命令是Linux系统提供的一个文本编辑工具,可以对文件内容进行编辑,类似于Windows中的记事本 语法: vi file…

MySQL锁三部曲:临键、间隙与记录的奇妙旅程

欢迎来到我的博客,代码的世界里,每一行都是一个故事 MySQL锁三部曲:临键、间隙与记录的奇妙旅程 前言临键锁的奥秘间隙锁记录锁 前言 在数据库世界中,锁是维护数据完整性的一种关键机制。而MySQL中的临键锁、间隙锁和记录锁则是锁…
最新文章