18143453325 在线咨询 在线咨询
18143453325 在线咨询
所在位置: 首页 > 营销资讯 > 建站知识 > 小知识:C语言宏定义中#和##符号的用法

小知识:C语言宏定义中#和##符号的用法

时间:2023-01-31 09:36:01 | 来源:建站知识

时间:2023-01-31 09:36:01 来源:建站知识

在某些C语言代码中,有时我们可能会看到宏定义中带有#、##,这些符号有特殊的作用。下面,我们用几个简单的例子来说明一下。

1、一个#的作用

一个#的作用就是把后面的参数当做一个字符串,也就是说等同于把后面的宏变量加上双引号:

运行上述代码,可以得到输出:Hello world 1Hello world 2这说明 #define PRINT(NAME) printf(#NAME)这个宏,等同于把NAME加上了双引号“”,即替换成了“NAME”,所以,第一个PRINT可以直接把括号内的内容打印出来。有些地方会提到#@符号,可以把后面的宏变量字符化,也就是说加上单引号’’,但是不推荐使用这个符号,主要是很多平台下都不支持。

2、两个##的作用

两个##是连接符,即把两个宏变量拼接到一起,看下面的例子:

定义了两个宏LINK和POWER,LINK直接把两个宏变量拼接起来,所以n等于1234;POWER把两个宏变量和e顺次拼接,所以n2等于2e3,也就是等于2000。

【嵌入式物联网单片机学习资料】整理了全套精华学习资料,除了教程外,还有一些大厂面经+笔试面试题,开源共享给大家。

点击加V自取:

3、注意事项

#和##在宏定义中使用时,它后面的参数如果也是一个宏,那么是不会展开的。如下面的例子:

这段代码是会编译报错的,LINK(A,B)这句只会展开成AB,而不会再往下一层把A、B也展开成12、34。由于AB是未定义的,所以编译报错。解决办法是再定义一个宏,做一个中间转换:

定义一个_LINK(AA,BB)的宏做中间转换,就能正常把LINK(A,B)展开_LINK(A,B),最终展开成1234。好了,本节的内容就分享到这了,希望这篇文章能对大家有所帮助。END

来源:小白白学电子

原文链接:小知识:C语言宏定义中#和##符号的用法
转载自:嵌入式微处理器
文章来源于单片机与嵌入式
版权声明:本文来源网络,免费传达知识,版权归作者所有,如涉及作品版权问题,请联系我进行删除。

关键词:符号,知识,语言,定义

74
73
25
news

版权所有© 亿企邦 1997-2025 保留一切法律许可权利。

为了最佳展示效果,本站不支持IE9及以下版本的浏览器,建议您使用谷歌Chrome浏览器。 点击下载Chrome浏览器
关闭