##运算符使代码可读且提高封装性

目录

为什么要写这篇文章

##运算符的用法

当初认识不足导致的问题

实际使用/可读性

对于提高封装性的补充

好的介绍文章分享


为什么要写这篇文章

知识点儿很小,但是当很多知识点儿放在你面前,很可能意识不到哪些是对你有用的,看看就觉得自己会了,但当真正有应用场景应用需求的时候可能实际利用不起来。怎么找到切入点并逐渐掌握,然后形成自己的知识架构,是我想做的。当有个知识点自己实际用到了,就想记录下来,之后以此为锚可以拓展连接到哪些新的知识点。这几天听说了个词:输出倒逼输入。同时也是我的一点儿思考,如何把零碎的时间让其变得具有连续性。还有个词:如何避免重复造轮子,之前的之前,听罗辑思维听多了,在这种知识产生速度远远快于学习的时代,该怎样学习,我当时的理解是目录思维,用时知道该去什么地方寻找就够了,觉得知识都为我所有为我所用,天真,那顶多算是技术人员的认知广度,技术人员的能力深度我没感受到。专业能力也没怎么提高。

##运算符的用法

组合:把##前后的“记号”组合成一个新的标识符。例子就是#define GPIO(A)   GPIO##A

当初认识不足导致的问题

我当时看到的不是这个示例,而是下面这个,类似变量的用法。虽然后面有我举的例子类似用法,但先入为主的因素让我觉得那只是一般用法,而不是只能那样用。printf的用法应该都了解吧,逗号后面的值通常是个变量。而且赋值操作也是变量的用法。

然后我就试验了一下,用的方法是嵌入式大杂烩分享的,人家是用Notepad++来实现的还有配置步骤 :使用Notepad++ 来开发C程序   把Notepad++配置成能编译C代码的记事本

保存,然后打开cmd命令行,调用MINGW编译器将.c文件编译成.exe的可执行程序,然后直接命令行输入XXX.exe,然后回车,有打印信息的话就会显示出来。我个人觉得这种方式不是很方便,还需要打开cmd命令行,还需要找到源文件所在路径,一顿操作对于嵌入式Linux的人来说可能不是很简单吗。但对于验证想法来说懒得就想在VSCode一键编译执行。有方法的希望能在评论区留言,我找到了一篇但是并没有解决我的问题:手把手教你用VScode调试仿真  ,竟然还遇到了VScode连接不到扩展商店,通过这篇文章解决的:VScode连接不到扩展商店的解决办法

后来在C语言中文网找到了解决方法(VSCode一键编译执行),说起来很简单:VSCode运行C和C++程序

因为做一个RGB灯板的初始化,18个引脚,都像下面这样写,简单重复,在源文件中占很大空间,想着能不能简化成使用for循环来配置,毕竟RED_1_PIN和RED_2_PIN很相似,相似到只有一个数字不同。再加上给我一种可以当成变量用的感觉,就有了如下用法

编译结果是这样的:

然后我又试了下const变量是否可以

编译结果仍然是上面那样

实际使用/可读性

为什么上面的编译结果是失败的,因为宏的参数不能是个变量,这是编译器决定的,宏只是由编译器完成替换,到不了链接并生成可执行文件且程序运行的时候。那还有什么用?!提高封装性 和 程序的可读性。

格式统一更具有可读性

关于封装性,我目前还没有用到,之后如果用到会进行补充

对于提高封装性的补充

如果实现相同功能的函数,而使用RED_1_PIN  , RED_2_PIN ... 因为红绿蓝三种灯,调用的底层函数一致,引脚很相似,但需要逐个将RED_1_PIN 替换为GREEN_1_PIN , RED_2_PIN 替换为GREEN_2_PIN, 共执行6次操作,而按照上图这种写法,格式更统一,可以一次操作就完成替换。

因此我对提高封装性的理解是直接给定一个数值就代表相应功能引脚,实现相似功能的函数可以一次替换。而实现上面这个功能的目的是方便上层调用。比如我要实现一个随机灯亮,产生了一个随机数(1~6 ,对应6个红灯)之后,将随机数作为函数输入,最后要设置相应引脚,就调用上面功能函数了。要实现这个功能我只想到了这么一种方法,但实现起来代码量骤增,这不是提高封装性的代价,而是感觉要实现该功能必须的,谁让它那么多引脚呢有不同意见的可以在评论区留言。可能有人会说直接查看底层,找到各引脚对应数值,然后不就可以使用循环,而不用代码量骤增了吗?看似可以使代码量骤降,但引脚和灯的引脚极可能因为不是顺序对应关系而实现不了。还有一种情况是为了提高运行效率,写的一些其他人“看不懂”的代码,都是不大提倡的,

好的介绍文章分享

添加了这两篇文章之后,感觉自己写博客更有意义了,因为不只是自己的积累,博客里也积累了我不知道的东西,博客不是只别人看而自己不看的了,我也会翻自己博客来充电了。

先来个截图,感觉值得一看再点击

这大概才是提高封装性的正确打开方式吧:C语言#和##连接符在项目中的应用  

信息量较大,随便翻翻不见得能get到:【为宏正名】99%人都不知道的"##"用法

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值