关于C代码中的“逆向思维”

简介:

其实,这里要说的并不是什么“逆向思维”,而是一些与大多数人的编码习惯相反的“非常规”写法。

if (value == CONST) 还是 if (CONST == value) ?
前者是大多数人、大多数开源代码、教科书、等等的写法。比较符合人的思维方式,看上去很自然。
而后者却被人提出,因为它具体优于前者的地方。如果你误把“==”写作“=”的话(如果编码时比较马虎,这还是容易犯的),后一种写法,编译器会给出一个error;而前一种,编译器只会给出warning,以至于错误可能被隐藏到“运行时”。
我个人还是比较推崇前一种写法,因为看上去顺眼。如果说这样写可能造成把笔误(“==”写作“=”)带到“运行时”的话?我认为这并不是写法的问题,而是不重视warning带来的问题。编译器已经警告你了,为什么置之不理呢?

for (i=0; i<MAX; i++) 还是 for (i=MAX-1; i>=0; i--) ?
同样,前者是符合习惯的写法。而后者却被人提出,因为它可能具有性能上的优势。
前一种写法是将i和MAX比较,每次比较需要执行一次CMP(或类似)指令,该指令会在CPU中设置FLAG。然后再执行一条指令去检查FLAG,以便确定比较结果;
而后一种写法将i和0比较,CMP指令可能可以省略掉。因为i--的时候,如果i减为0、或者符号有变化、等等情况下,CPU中的FLAG会顺便被设置。这时候,比较i和0的话可能只需要直接看标志位就行了。
但是,尽管如此,我个人还是比较推崇前一种写法,因为看上去顺眼。把i和0比较仅仅是提供了被优化的可能性,编译器却未必就能实现优化(即使打开了优化选项)。并且,就算优化了,执行效率的提升也是很有限的(一条CMP指令而已)。如果真的这么渴望优化的话,倒不如把for循环展开得了,就像xmemcpy所做的那样……


目录
相关文章
|
搜索推荐 JavaScript 前端开发
Gmail邮箱API发送邮件的方法有什么
使用Gmail API发送邮件,需先获取API访问权限,包括在Google Cloud Platform上创建项目,启用Gmail API,生成API密钥或OAuth 2.0凭据。然后,用Python等编程语言设置API请求,指定邮件详情。发送简单邮件涉及创建Base64编码的消息体,而带附件的邮件需编码为multipart格式。可添加邮件头信息,并处理发送结果以确保成功。Gmail API使应用能集成自动化、个性化的邮件发送功能,提升效率和体验。
|
7月前
|
关系型数据库 MySQL 数据安全/隐私保护
MySQL下载与安装
本文介绍了MySQL的下载与安装流程(2025.4.29,作者:blue)。主要内容包括:1) 从官方地址下载MySQL;2) 解压文件并配置环境变量;3) 注册MySQL服务并通过命令行验证;4) 启动和停止MySQL服务;5) 修改默认账户密码;6) 登录MySQL。通过详细步骤和截图,帮助用户顺利完成安装与初始配置。
965 13
|
12月前
|
机器学习/深度学习 自然语言处理 语音技术
深入探索深度学习中的兼容性函数:从原理到实践
深入探索深度学习中的兼容性函数:从原理到实践
149 3
|
边缘计算 运维 安全
云上物联网边缘节点:重塑连接智能世界的桥梁
结语 云上物联网边缘节点作为物联网技术的重要组成部分,正以其独特的优势和潜力推动着物联网的快速发展。面对未来的机遇和挑战,我们需要不断创新和完善边缘节点的技术架构和应用模式,推动物联网技术的深度融合和广泛应用,为构建智慧社会贡献力量。
407 0
|
前端开发 JavaScript 调度
React 组件状态(State)
10月更文挑战第8天
218 1
|
人工智能 测试技术
探索人工智能在测试领域的新纪元:AI编写测试用例的前景
本文介绍了测试用例的重要性及其基本组成元素,如模块、标题、前置条件等。通过实践演练展示了如何利用ChatGPT自动生成测试用例,包括关键词精确匹配、模糊匹配、异常输入和搜索结果为空的场景。通过向ChatGPT提供详细需求和格式规范,可以得到Markdown格式的测试用例,然后导入Excel进行归档。关键在于清晰阐述需求、逐步细化任务,并对ChatGPT的回复进行调整优化。
|
应用服务中间件
报错java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.问题出现原因,及解决办法
报错java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.问题出现原因,及解决办法
405 0
|
存储 关系型数据库 MySQL
PolarDB-X 与 X-DB、PolarDB
PolarDB-X与X-DB、PolarDB都是阿里巴巴的数据库产品。那么他们之间有什么样的关系?要回答这个问题,我们首先要搞明白,什么是X-DB。什么是X-DB?简言之,X-DB主要指在MySQL的基础上基于XEngine引擎打造的分布式跨AZ高可用数据库。X-DB的核心能力之一是基于Paxos跨...
PolarDB-X 与 X-DB、PolarDB
|
存储 机器学习/深度学习 编解码
GlusterFS如何解决分布式文件系统的难题?
GlusterFS如何解决分布式文件系统的难题?
GlusterFS如何解决分布式文件系统的难题?
|
消息中间件 弹性计算 运维
重新定义分析 - EventBridge实时事件分析平台发布
为了解决事件领域中针对流式事件做分析的难题,EventBridge 近日发布了针对事件/消息领域的全新分析工具--EventBridge 实时事件分析平台。下面简要对 EventBridge 实时事件分析平台的内容进行介绍。
重新定义分析 - EventBridge实时事件分析平台发布
下一篇
oss云网关配置