《编写高质量代码:改善c程序代码的125个建议》——建议16-3:尽量避免在表达式中使用默认的优先级

简介:

本节书摘来自华章计算机《编写高质量代码:改善c程序代码的125个建议》一书中的第2章,建议16-3,作者:马 伟 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

建议16-3:尽量避免在表达式中使用默认的优先级

在C语言中,运算符的优先级如表2-1所示。


447b5e9c8fc81db535f14aa01431d478e0c6c79e


60d28c1dd7a4e1fd61fdc976005d9d21e36a0090

虽然C语言中的运算符都有自己的优先级别,但是为了提高程序的可读性,防止阅读程序时产生误解,防止因默认的优先级与设计思想不符而导致程序出错,我们应该尽量避免使用默认的优先级。如果代码行中的运算符比较多,应当用括号明确表达式的计算顺序,从而避免采用默认的运算符优先级。
来看下面的示例代码:

if ((a | b) && (a & c))
{
    /*处理代码*/
}
if ((a | b) < (c & d)) 
{
    /*处理代码*/
}

在上面的代码中,我们用括号来明确表达式的计算顺序,使程序看起来非常直观,具有良好的可读性。现在,我们采用默认的运算符优先级来改写上面的代码:

if (a | b && a & c)
{
    /*处理代码*/
}
if (a | b < c & d) 
{
    /*处理代码*/
}

根据表2-1的运算符优先级原则,“a | b && a & c”等价于“ (a | b) && (a & c)”,第一个if语句“if (a | b && a & c)”不会出错,但语句却不易理解;再来看第二个if语句“if (a | b < c & d)”,因为“<”运算符的优先级比“|”与“&”运算符高,所以“a | b < c & d”等价于“a |(b < c)& d”,这就造成了判断条件出错。
最后还需要说明的是,除了可以通过括号的方式来明确表达式的计算顺序,避免使用默认的运算符优先级,还需要遵循表达式简洁原则,尽量避免在表达式中把不同类型的操作符混合起来。

相关文章
|
5月前
|
缓存 前端开发 JavaScript
前端渲染性能的底层逻辑:跳出重排重绘的表层认知
本文揭示前端渲染优化的本质:性能瓶颈不在“重排重绘”本身,而在于浏览器渲染流水线(JS→样式→布局→绘制→合成)的**触发频次与全链路开销**。主流框架的优化逻辑——批量更新、精准更新、合成层隔离——正是围绕降低流水线调用成本展开。落地只需三招:收敛更新时机、善用编译期优化、慎用合成层。
|
11月前
|
人工智能 机器人
超越基础问答:用RAG技术打造“有据可循”的智能助手
超越基础问答:用RAG技术打造“有据可循”的智能助手
589 99
|
8月前
|
缓存 前端开发 API
Python 开发进阶:从初级到全栈工程师的能力提升路径
本文系统梳理了Python开发者从初级到全栈的进阶路径,涵盖框架深度应用、性能优化、架构设计、容器化部署及DevOps实践。通过分阶段技能升级与真实项目落地,助力开发者突破“脚本思维”,构建全链路工程能力,实现从“会编码”到“能交付完整系统”的质变跨越。(238字)
|
8月前
|
机器学习/深度学习 存储 搜索推荐
Python自动整理音乐文件:按艺术家和专辑分类歌曲
本文介绍如何用Python自动化整理杂乱音乐文件,通过mutagen等库读取MP3、FLAC等格式的元数据,按艺术家和专辑智能分类,支持多线程加速、图形界面及增量处理,大幅提升效率,500首歌曲2分钟完成,准确率超99%。
450 0
|
8月前
|
监控 供应链 搜索推荐
巧用淘宝API,精准把握消费者需求,销量飙升!
在电商竞争中,淘宝API是洞察消费者需求的关键工具。通过调用商品、交易、评价、用户画像等数据接口,实现选品优化、精准营销、库存管理与竞品分析,推动运营从“经验驱动”转向“数据驱动”,助力销量飞跃。合规使用API,提升效率,抢占市场先机。(238字)
|
存储 Java 数据库
Spring Boot 注册登录系统:问题总结与优化实践
在Spring Boot开发中,注册登录模块常面临数据库设计、密码加密、权限配置及用户体验等问题。本文以便利店销售系统为例,详细解析四大类问题:数据库字段约束(如默认值缺失)、密码加密(明文存储风险)、Spring Security配置(路径权限不当)以及表单交互(数据丢失与提示不足)。通过优化数据库结构、引入BCrypt加密、完善安全配置和改进用户交互,提供了一套全面的解决方案,助力开发者构建更 robust 的系统。
546 0
|
传感器 人工智能 物联网
穿戴科技新风尚:智能服装设计与技术全解析
穿戴科技新风尚:智能服装设计与技术全解析
1154 85
|
前端开发 JavaScript API
React 文件下载组件 File Download
本文介绍了在React中实现文件下载组件的方法,包括使用`a`标签和JavaScript动态生成文件,解决了文件路径、文件类型、大文件下载及文件名乱码等问题,并展示了使用第三方库`file-saver`和生成CSV文件的高级用法。
537 6
|
数据采集 存储 监控
实战案例:采集 51job 企业招聘信息
本文基于Feapder框架,从零开始搭建企业级招聘信息爬虫管道。内容涵盖基础概念(数据管道与Feapder特点)、生动比喻(快递系统类比爬虫流程)、技术场景(代理IP、Cookie管理)及实战案例(采集51job岗位信息并分类存储)。通过完整代码示例,展示如何配置代理、自定义中间件及Pipeline。无论产品经理还是学生,均可轻松上手,构建高效稳定的爬虫系统。
942 10
实战案例:采集 51job 企业招聘信息
|
存储 缓存 数据挖掘
《解锁反规范化设计的适用场景:数据库性能优化的深度洞察》
数据库设计中,规范化与反规范化是两种重要策略。规范化减少冗余、确保一致性,而反规范化通过增加冗余提升查询性能,适用于数据查询密集型场景、复杂分析与报表生成、历史数据与日志管理、分布式与缓存架构以及性能优化等场景。例如,在电商平台商品展示中,反规范化可避免多表连接,提高查询效率;在数据分析中,整合相关表简化查询逻辑;在日志管理中,集中存储提升性能。然而,反规范化会带来数据冗余和一致性维护的挑战,需根据业务需求权衡利弊,合理应用以构建高效稳定的数据库系统。
398 6