完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我正在尝试升级32位MCU的旧固件。fw中有许多宏,它们使用各种操作,例如逻辑移位等。我想替换这些移位和逻辑操作。下面的宏是一个示例。
摆脱这些操作的主要原因是为了提高代码的可读性。在这里有什么好的替代方法? |
|
相关推荐
6个回答
|
|
((x >> 10)&1)可能更具可读性,但是无论哪种方式都很好。
|
|
|
|
换成什么?对我来说,这是完全可读的。也许只需添加注释,即可将第10位与整数隔离开来。
|
|
|
|
是否可以使用某些struct或union等可以代替这些操作的东西?
|
|
|
|
不。位域是特定于编译器的,这些移位在任何地方都相同
|
|
|
|
您不能使用位域,所以不要研究它们。C标准对它们的定义非常差,导致代码脆弱且完全不可移植。移位是正确的解决方案
|
|
|
|
您发布的代码可读性强。假定C程序员了解常用的运算符和表达式的含义。特别是在嵌入式系统编程中,按位运算符。但是,不需要它们了解神秘宏的含义-稍后再讲。
首先,代码还有其他与可读性无关的问题,即移位运算符在带符号类型上使用很危险。因此,1应始终将编写为1u保证无符号类型。此外,还有一个初学者级的错误:宏参数不被括号包围。 此外,右移10是奇怪且不必要的。如果宏的目的是根据是否设置了位给出1或0,则可以通过将结果与进行比较!= 0,或!!在其前面使用来将其转换为布尔表达式。这样,我们就不会冒与算术移位或隐式类型提升相关的错误的风险。错误修复,我们最终得到以下结果:
这是否提高了可读性?没有丝毫!但是它修复了1个明显的错误和2个潜在的错误。 事实证明,出于提高可读性的目的,宏一点也不好,相反。要真正提高可读性,我们应该做的第一件事就是用常量替换“幻数”:
根据代码的作用,应该给“ MASK”一个更有意义的名称。 这就引出了问题的根源:即程序员为了执行琐碎的操作而编写秘密的宏语言。为了大大提高可读性,我们放弃了该宏:
完全可以被所有C程序员100%理解。在一个实际的示例中,您可能会遇到以下情况:
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
OV7670摄像头使用串口发送数据到另一个板子上的lcd,出现花屏
1370 浏览 1 评论
684 浏览 0 评论
657 浏览 0 评论
STM32CUBEMX(12)--IIC,12864OLED(0.96寸)移植
702 浏览 0 评论
STM32CUBEMX(5)--自定义红外NEC解码,定时器TIM捕获方式
638 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-27 07:21 , Processed in 0.874441 second(s), Total 84, Slave 67 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号