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

如何让代码封装性强,耦合度低(持续更新) 1.传值问题,当A跳转到B界面,同时需要将值传给B ,常规的做法是在B头文件中暴露需要传值的变量 @interface B : UIViewController @property (strong) NSString* name; @end 然而其实这样并不好,任何持有B实例的地方都能修改name 的值 优化处理措施:可以将name 变量设置为初始化必须变量 // .h 阅读详情

目录

为什么要写这篇文章

##运算符的用法

当初认识不足导致的问题

实际使用/可读性

对于提高封装性的补充

好的介绍文章分享


为什么要写这篇文章

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

##运算符的用法

组合:把##前后的“记号”组合成一个新的标识符。例子就是#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%人都不知道的"##"用法

SystemVerilog宏:从文本替换到代码生成的IC设计核心技能 在数字电路设计与验证领域,代码复用和自动化是提升工程效率的关键。编译时处理技术通过在代码编译阶段进行操作,能够实现代码结构的动态生成与配置,这一原理在硬件描述语言中尤为重要。SystemVerilog宏正是基于文本替换机制,在编译前对代码进行预处理,从而支持条件编译、参数化代码生成等高级功能。其技术价值在于显著提升设计复用性、可维护性,并减少手动重复劳动带来的错误。在应用场景上,宏广泛用于验证环境构建、寄存器模型自动化生成以及跨工艺库适配。本文聚焦SystemVerilog宏的实战应用,深入探讨带参数宏、连 阅读详情

相关推荐

C++关键字与标识符命名规范:从语法基础到工程实践

在编程语言中,关键字与标识符是构建程序逻辑的基础元素。关键字作为语言预定义的保留字,定义了语法结构和核心功能,如C++中的const、virtual、template等,它们控制着类型系统、内存管理和程序流程。标识符则是开发者自定义的名称,用于变量、函数和类等实体。良好的命名规范不仅能提升代码可读性,更是工程实践中保障可维护性和团队协作的关键。通过遵循明确的命名约定(如蛇形命名法、驼峰命名法),结合编译原理和实际应用场景,开发者可以创建自文档化的代码,减少认知负荷。本文聚焦C++关键字分类与标识符命名艺术,

weixin_33862993的博客 298

如何提升代码可读性?

作为开发者,可能会经常听到“代码首先是写给人看的”、“写可读代码相当重要”等等。 对于如何使代码可读性更强,开发者往往都有自己的看法。那么你可曾仔细想过什么才能真正使代码可读性增强。 一些标准答案 无论你使用什么编程语言,你都可能会认同下面的建议可以增强代码可读性: 好的变量、方法、类名 一个变量、类、方法只做一件事 一致的缩进,一致的格式 减少代码中的...

白七十三 364

Python中自定义迭代与运算符重载的艺术

本文深入探讨了在Python中创建自定义可迭代类和重载运算符的强大能力。通过实现MyRange类来生成数字序列,我们了解了迭代器协议的__iter__()和__next__()方法。同时,我们还探讨了运算符重载如何提高代码可读性和直观性,并提供了Vector和Matrix类作为示例。文章最终强调了设计模式在提高代码质量和可维护性方面的重要性。

weixin_36078669的博客 449

教你一招,提升你Python代码可读性,小技巧

Python的初学者,开发者都应该知道的代码可读提高技巧,本篇主要介绍了如下内容: PEP 8是什么以及它存在的原因 为什么你应该编写符合PEP 8标准的代码 如何编写符合PEP 8的代码 为什么我们需要PEP 8? PEP 8的存在是为了提高Python代码可读性的。但为什么可读性如此重要?为什么编写可读代码是Python语言的指导原则之一? 正如Guid...

weixin_30919571的博客 770

C++ >> 封装 >> 运算符重载

时间:2019年8月22日21:24:39 编译器:vs2017 1.加号运算符重载 2. 递增运算符重载 3. 左移运算符重载 4. 赋值运算符重载 5. 关系运算符重载 6. 函数调用运算符重载 加号运算符重载 #include <iostream> #include <cmath> using namespace std; //运算符重载概念:对已有的运算符重新进...

leno_peanute的博客 319

赋值运算之加强篇

现象: public class Test{ public static void main(String[] args){ short a=1; //(1) a=a+1;//(2) a+=1;//(3) } } 对上述代码进行编译会发生一个很有趣的现象a=a+1报错了,这是为什么呢? 难道a=a+1和a+=1不一样?想到这儿那恭喜你答对了,其实a=a+1和a+=1还真不一样。

草原之家 813

C语言 | #运算符##运算符

1、#运算符 我们平时使用带参宏时,字符串中的宏参数是没有被替换的。例如: 输出结果为: 然而,我们期望输出的结果是: 5 + 20 = 25 13 + 14 = 27 这该怎么做呢?其实,C语言允许在字符串中包含宏参数。在类函数宏(带参宏)中,#号作为一个预处理运算符,可以把记号转换成字符串。例如,如果A是一个宏形参,那么#A就是转换为字符串"A"的形参名。这个过程称为字符串化(strin...

嵌入式大杂烩 5005

解析宏定义中的 # 运算符## 运算符

C语言宏定义中的 # 运算符## 运算符介绍和使用。

jhdddd的博客 528

C语言笔记:运算符运算符

1、#运算符 我们平时使用带参宏时,字符串中的宏参数是没有被替换的。例如: 输出结果为: 然而,我们期望输出的结果是: 5 + 20 = 25 13 + 14 = 27 这该怎么做呢?其实,C语言允许在字符串中包含宏参数。在类函数宏(带参宏)中,#号作为一个预处理运算符,可以把记号转换成字符串。例如,如果A是一个宏形参,那么#A就是转换为字符串”A”的形参名。这个过程称为字符串...

C语言学习之家 301

语言居心形代码_「C语言笔记」#运算符##运算符

接上篇笔记我们分享的是RTT的PIN设备驱动:「RT-Thread笔记」IO设备模型及PIN设备,其中用到PIN驱动框架中的pin_mode函数来设置引脚的模式:void rt_pin_mode(rt_base_t pin,rt_base_t mode);这里的引脚编号pin需要和芯片的引脚号区分开来,它们并不是同一个概念,引脚编号由PIN设备驱动程序定义,和具体的芯片相关。其实,驱动代码drv_...

weixin_34135180的博客 132

c语言字符串替换_C语言笔记:运算符运算符

1、#运算符我们平时使用带参宏时,字符串中的宏参数是没有被替换的。例如:输出结果为:然而,我们期望输出的结果是:5 这该怎么做呢?其实,C语言允许在字符串中包含宏参数。在类函数宏(带参宏)中,#号作为一个预处理运算符,可以把记号转换成字符串。例如,如果A是一个宏形参,那么#A就是转换为字符串”A”的形参名。这个过程称为字符串化(stringizing)。以下程序演示这个过程:输出结果为:这就达到我...

weixin_39662611的博客 611

c语言uint8的数组怎么转换为uint32_「C语言笔记」#运算符##运算符

接上篇笔记我们分享的是RTT的PIN设备驱动:「RT-Thread笔记」IO设备模型及PIN设备,其中用到PIN驱动框架中的pin_mode函数来设置引脚的模式:void rt_pin_mode(rt_base_t pin,rt_base_t mode);这里的引脚编号pin需要和芯片的引脚号区分开来,它们并不是同一个概念,引脚编号由PIN设备驱动程序定义,和具体的芯片相关。其实,驱动代码drv_...

weixin_39878698的博客 910

c语言uint8的数组怎么转换为uint32_【C语言笔记】#运算符##运算符

接上篇笔记我们分享的是RTT的PIN设备驱动:【RT-Thread笔记】IO设备模型及PIN设备,其中用到PIN驱动框架中的pin_mode函数来设置引脚的模式: void 这里的引脚编号pin需要和芯片的引脚号区分开来,它们并不是同一个概念,引脚编号由PIN设备驱动程序定义,和具体的芯片相关。其实,驱动代码drv_gpio.c文件一个结构体数组存放了每个PIN脚对应的编号信息,如: 可以看到,...

weixin_39593061的博客 539

C语言 | 两个冷门但有用的C运算符

点击上方「嵌入式大杂烩」,选择「置顶公众号」第一时间查看编程笔记!接上篇笔记我们分享的是RTT的PIN设备驱动:【RT-Thread笔记】IO设备模型及PIN设备,其中用到PIN驱动框架...

嵌入式大杂烩 989

C++运算符重载:从语法糖到语义核心的深度解析与实践指南

运算符重载是C++实现用户自定义类型与内置类型平权的关键机制,它允许程序员为自定义类型定义运算符的行为,从而提升代码可读性和表达力。其原理在于通过成员函数或非成员函数重载运算符,赋予类型特定的语义,如定义“相加”或“相等”的逻辑。这一技术在工程实践中价值显著,尤其在构建数学库、容器类或流处理系统时,能大幅降低使用者的学习成本,并增强代码的直观性。例如,在实现复数运算、矩阵计算或自定义日志输出时,合理运用运算符重载可使代码更贴近自然语言表达。本文聚焦于C++运算符重载的核心规则、实现技巧及常见陷阱,帮助开发

weixin_34393428的博客 384

python复习笔记

不可变数据类型:数字、字符串、元组可变数据类型:列表、字典、集合元组中包含0个或1个元素的特殊语法规则 #空元组 # 一个元素,需要在元素后添加逗号集合的操作 函数。集合a、b,差集: 并集 : 交集: 对称差:优先级为 字符串常用函数 ## 字典的操作 字典元素排序 ## 列表函数复习列表可以使用+操作符进行拼接 ## 函数和类的复习python 的函数参数的传递:类的复习: ## 文件操作,txt和excl等文件xlwt1.创建一个工作簿2.创建一个sheet对象,第二

m0_64509386的博客 633

C语言——预处理

在预处理之前,编译器必须对程序进行一些翻译处理, 编译器把源代码中出现的字符映射到源字符集 编译器定位每个反斜杠后面跟着换行符的实例,并删除它们(可以把两个物理行转化为一个逻辑行) 编译器把文本划分为预处理记号序列、空白序列和注释序列(编译器将用一个空格字符替换每一条注释) 宏 预处理器发现程序中的宏后,会用宏等价的替换文本进行替换。如果替换的字符串中还包含宏,则继续替换这些宏,唯一例外的是双引号中的宏。 类函数宏与函数(宏和函数的选择是时间和空间的权衡) 宏调用是字符串替换,在编译之前把参数记号传递给程序

qq_42437056的博客 228

C++程序设计教程 第三版 钱能著

# 一、 c语言发展历程至今,C语言仍然是世界上最流行广泛应用的编程语言之一,尤其在系统软件开发、嵌入式系统、设备驱动等领域有着不可替代的地位。二、c语言特点:C语言拥有较少的关键字,仅包含32个左右的关键字,加上简洁的语法结构,使得程序编写起来较为精炼,易于阅读和理解。同时,它的源代码紧凑,减少了不必要的冗余。:C语言允许用户直接访问物理地址和进行位操作,这使得它既能进行底层系统编程,又能进行较高层的应用开发,灵活性极高。:C语言编译生成的目标代码效率接近汇编语言,运行速度快,占用资源相对较少。

m0_67405031的博客 724
上一篇: 关于过往与规划
下一篇: 关于蓝牙报文可能的类型转换方式
拳拳小布
博客等级 码龄9年 88粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值