今天我们来看一下利用宏定义编写类似函数调用的方法和真实的函数有什么区别。
一、宏和函数怎么选?
首先来看一个例子:
#define N 2+2
void main()
{
int a = N * N;
printf( "a = %d", a);
}
这里,我们得理解宏的工作方式,它是在编译器编译代码之前做的一个纯文本的替换工作,因此,有时候简单宏替换的结果就会和我们预想的结果出现偏差。
比如上面的例子,我们预期 N 为 4,a=16,但实际结果却为 a=8;原因在于宏的作用方式是傻瓜式的文本替换。
在编译之前,编译器首先将宏定义的文本替换到程序体中,这个替换是完全无脑的一个操作,看一下替换结果就知道了。
#define N 2+2
void main()
{
int a = 2 + 2 * 2 + 2;
printf( "a = %d", a);
}
这也就是我们上一篇文章中讲到的,写宏函数的时候一定要注意括号的应用,多加括号一定是利大于弊的。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
函数
+关注
关注
3文章
4423浏览量
68009 -
代码
+关注
关注
30文章
4983浏览量
74516 -
编译器
+关注
关注
1文章
1673浏览量
52057
发布评论请先 登录
相关推荐
热点推荐
低成本宏键盘旋钮开源项目介绍
办公切软件、调参数太繁琐?创作时控笔刷 / 缩放总找快捷键?商用宏键盘价格高,还难适配个性化操作需求?想自制宏键盘,却遇设计复杂、组装难度高的问题?
采购必看:宏展精密热风烤箱技术解析——选型、性能与成本适配指南
对于采购而言,精密热风烤箱的选型核心是“适配需求、稳定可靠、性价比高”,无需深入研究复杂的技术原理,但需掌握关键技术指标的实际意义,明确不同技术配置对应的使用场景与成本,避免踩坑。本文结合宏展精密
宏微科技首家欧洲全资子公司正式成立
在国家积极鼓励企业“走出去”及共建“一带一路”倡议的宏大背景下,国内功率半导体领域的领先企业——江苏宏微科技股份有限公司(以下简称“宏微科技”)今日宣布,其首家欧洲全资子公司 MacMic
别漏看!广东宏展告诉你高低温试验箱这些被忽视的性能细节
客户最易忽略的性能细节疑问1、“设备的噪音和能耗在长期使用中影响大吗?”解答:实验室场景选噪音≤65dB的设备(宏展采用静音压缩机+隔音箱体设计),能耗看COP值(制冷性能系数),宏展设备COP
C语言中实现函数宏的三种方式
用 ; 的调用方式无论从程序阅读还是使用方法方面都是十分别扭的;而规定必须使用带花括号的 if 的调用方式有违常理的,因为宏函数应该适用于任何语法。
优缺点总结:
优点:简单粗暴。
缺点:不能在无花括号且有
发表于 12-29 07:34
选购不迷茫:广东宏展科技总结出通用技术规格选购关键疑问指南
以下从客户视角出发,梳理不同行业在高低温试验箱技术规格与性能上的核心疑问、选购判断标准,结合宏展产品优势给出解答,贴合实际采购决策场景:通用核心技术规格疑问1、温域范围怎么选?是否越宽越好?客户疑问
宏泰科技与ADI正式签署合作备忘录
近日,南京宏泰半导体科技股份有限公司(以下简称“宏泰科技”)与全球领先的高性能半导体公司ADI正式签署合作备忘录,双方将在半导体测试与精密信号测量领域展开持续深度合作,共同推动高性能测试系统的技术创新与市场应用落地。
C语言宏拼接运算符典型使用
在C语言中,##运算符(称为[size=16.002px]标记拼接运算符)用于宏定义中将两个标记(token)拼接成一个新的标记。它在预处理阶段处理,常用于动态生成变量名、函数名或类型名,以提高代码
发表于 11-20 08:27
应用层外设进行数据传输,是否应该调用rt_device_create,rt_device_register等函数呢?
假如我要在应用层用一个新的usart2串口传输数据,那我应该是怎么做?
1.在工程未编译前将usart2加上,即定义宏BSP_USING_UART2,利用RT-Thread在硬件初始化
发表于 10-11 06:29
在rtthread的main函数里用HAL_Delay函数不起作用是哪里的问题?
函数就没有这个问题。
求大佬提供解决方法
CUBMX选的timbase source时钟源选的是Systick,优先级是15
main函数里代码如下
运行结果如下(一秒打印了几百
发表于 09-15 07:53
详解hal_entry入口函数
当使用RTOS时,程序从main函数开始进行线程调度;当没有使用RTOS时,C语言程序的入口函数main函数调用了hal_entry函数。由于我们新建的工程是没有选用RTOS的,因此,
使用 BSP 助手创建项目并创建 BSP 后,我应该在哪里更改 cy_device_headers.h 中列出的设备名称宏?
使用 BSP 助手创建项目并创建 BSP 后,我应该在哪里更改 cy_device_headers.h 中列出的设备名称宏?例如,我想手动将设备名称从 CY8C4024FNI_S402 更改
发表于 06-26 06:06
宏景智驾再获老股东追加投资
近日,宏景智驾再次获得老股东博将资本与衢州智远的追加投资。在竞争激烈、技术迭代加速的市场环境下,此次支持彰显了投资方对宏景智驾核心能力与长期发展潜力的高度认可。
Vicor助力宏发打造主动悬架电源系统
厦门宏发电声股份有限公司(宏发)打造业内性能卓越的主动悬架电源系统,旨在将长期以来仅见于豪华车型的功能引入中端车型。宏发成功突破困扰知名汽车技术供应商几十年的技术瓶颈,在满足主动悬架系统对尺寸、重量及瞬态性能的严苛需求的同时,兼
宏和函数应该怎么选
评论