五种c语言基本运算符(运算符与运算符)

1、#运算符

我们平时使用带参宏时,字符串中的宏参数是没有被替换的。例如:


五种c语言基本运算符(运算符与运算符)(1)

输出结果为:


五种c语言基本运算符(运算符与运算符)(2)

然而,我们期望输出的结果是:


五种c语言基本运算符(运算符与运算符)(3)

这该怎么做呢?其实,C语言允许在字符串中包含宏参数。在类函数宏(带参宏)中,#号作为一个预处理运算符,可以把记号转换成字符串。例如,如果A是一个宏形参,那么#A就是转换为字符串”A”的形参名。这个过程称为字符串化(stringizing)。以下程序演示这个过程:


五种c语言基本运算符(运算符与运算符)(4)

输出结果为:


五种c语言基本运算符(运算符与运算符)(5)

这就达到我们想要的结果了。所以,#运算符可以完成字符串化(stringizing)的过程。

2、##运算符

与#运算符类似,##运算符可用于类函数宏(带参宏)的替换部分。##运算符可以把两个记号组合成一个记号。例如,可以这样做:


五种c语言基本运算符(运算符与运算符)(6)

然后,宏XNAME(4)将展开x4。以下程序演示##运算符的用法:


五种c语言基本运算符(运算符与运算符)(7)

输出结果为:


五种c语言基本运算符(运算符与运算符)(8)

注意:PRINT_XN()宏用#运算符组合字符串,##运算符把记号组合为一个新的标识符。

其实,##运算符在这里看来并没有起到多大的便利,反而会让我们感觉到不习惯。但是,使用##运算符有时候是可以提高封装性及程序的可读性的。如跑实时操作系统的stm32程序中,关于gpio的硬件驱动中有如下代码:


五种c语言基本运算符(运算符与运算符)(9)

假设这样使用该宏:


五种c语言基本运算符(运算符与运算符)(10)

该宏将展开为:


五种c语言基本运算符(运算符与运算符)(11)

然后这就可以很方便的将要使用的硬件引脚这么一一列出来,然后再拿去进行配置:


五种c语言基本运算符(运算符与运算符)(12)

以上就是关于#运算符与##运算符的笔记,用#运算符组合字符串,##运算符把记号组合为一个新的标识符。如有错误欢迎指出。

ps:需要电子书籍、相关学习视频教程、项目源码、开发工具等学习资料可以关注我头条号,然后私信我【C语言资料】几个字就可以免费领取了。(注意私信我关键字不要写错,可以复制)从基础到项目实战全方面带你学习C语言开发,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页