今天我们来看一下利用宏定义编写类似函数调用的方法和真实的函数有什么区别。
一、宏和函数怎么选?
首先来看一个例子:
#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文章
4331浏览量
62598 -
代码
+关注
关注
30文章
4787浏览量
68591 -
编译器
+关注
关注
1文章
1634浏览量
49129
发布评论请先 登录
相关推荐
ADS1282没有CS片选,应该怎样单独给DAC传输数据呢?
请问DAC1282和ADS1282的SCLK、DIN、DOUT可以接到一起,然后分别连接MCU的SCK、SOMI、SIMO吗?
如果可以的话,ADS1282没有CS片选,应该怎样单独给DAC传输数据呢?
谢谢
发表于 11-25 07:35
SUMIF函数与SUMIFS函数的区别
SUMIF函数和SUMIFS函数都是Excel中用于条件求和的函数,它们可以帮助用户根据特定的条件对数据进行求和。尽管它们的基本功能相似,但在使用场景和功能上存在一些差异。以下是对这两个函数
胜宏科技拟收购APCB 100%股权
胜宏科技近期发布重要公告,宣布其计划通过全资子公司新加坡胜宏及PSL,以不超过2.787亿元人民币的现金,全面收购APCB Electronics(Thailand)Co.,Ltd.(简称APCB)的100%股权。此次收购标志着胜宏
TC387中有__disable_interrupts()关闭所有中断和打开所有中断的函数或宏吗?
TC387 芯片中有__disable_irq()和__enable_irq()关闭所有中断和打开所有中断的函数或宏吗,请告知
发表于 08-01 08:22
请问怎么在自己的工程里添加一个宏INCLUDE_xTaskGetHandle?
你好:
我需要使用 xTaskGetHandle 这个API,但是 idf.py menuconfig进去freertos组件里没有这个配置选项
我应该怎么添加一个宏定义到我的cmakelist里??而不是直接改sdk的文件。
发表于 06-21 12:39
webserver获取网页submit应该用什么函数呢?
各位大神:
esp32c3,idfd ubuntu编译,html转为C放在代码里,想获取网页的提交按键进行响应,请问提交“submit”时,C里应该对应的是哪个函数。本人webserver小白,感谢指教!
发表于 06-18 07:18
宏鑫科技即将挂牌上市
浙江宏鑫科技股份有限公司(以下简称“宏鑫科技”)成功获得证监会的批文,即将挂牌上市,这标志着宏鑫科技将成为资本市场锻造铝合金车轮第一股,迎来产业经营和资本运营双轮驱动的全新发展阶段。
嵌入式中回调函数的实现方法
回调函数的命名规范没有固定的标准,但是根据通用惯例和编码规范,回调函数的命名应该能够反映函数的作用和功能,让其他开发者能够快速理解并使用。
发表于 03-04 14:49
•722次阅读
嵌入式Linux C语言编程程序调试与宏定义
在Linux使用gcc编译程序的时候,对于调试的语句还具有一些特殊的语法。gcc编译的过程中,会生成一些宏,可以使用这些宏分别打印当前源文件的信息,主要内容是当前的文件、当前运行的函数和当前的程序行。
发表于 03-01 11:41
•1013次阅读
车载无线充用的超级电容应该怎么选?
车载无线充用的超级电容应该怎么选? 在选择车载无线充电器使用的超级电容时,有几个关键因素需要考虑。本文将详细介绍超级电容的原理、性能指标以及选购建议,以帮助读者更好地理解和选择适合自己的车载无线
评论