当前位置: 首页 > news >正文

漫谈:C语言 C++ 所有编程语言 =和==的麻烦

        这次不只是C语言很麻拐,是所有编程语言都很麻拐了。

        赋值和比较是编程语言最基本的操作之二,C和所有类C语言都使用“=”和“==”来分别表示赋值和比较。

        数学上等号“=”是个单一的概念,含义是“相等”,左右两边是等价的,很像编程语言的比较。但数学上写“x=.....”的时候,当然还是两边是等价的,但很有一些“赋值”的意思。所以,这个“=”直觉上既可以是比较又可以是赋值,但是编程语言不能这么混乱,必须区分开啊,于是就用“==”来表示比较,“=”只用作赋值。

        这想法本来是不错的,区分开了嘛,应该就没有麻烦了。

        问题是,人脑子里面的习惯不会轻易改变,于是“==”误敲成“=”就成了BUG之源。每个初学者都一定犯过很多次少打一个等号的错误(反过来的情形也有)。

        历史已经如此,想改变现状恐怕不可能了。除了在if条件里把常量写在“==”的左边,也没什么别的好办法。

        撇开C语言和类C语言的现实,有没有别的语言更好地解决了这个问题?

        有啊,见过“:=”算符吗?一些编程语言、脚本、伪指令用这个算符表达“赋值”,这样就完全避开了脑子里的固有习惯,当然缺点是要多敲很多字符,因为赋值太常用了。

        还有别的思路吗?我有一个啊:为什么允许在条件判断里赋值呢?如果最初的编译器加上这条规则,不是什么麻烦都没有了吗?

        条件判断里赋值是个非常不合逻辑的事情,出于性能考虑,当然可以这么做,但是这会妨碍理解啊。赋值顺手做条件判断是硬件支持的,CPU指令里包括运算结果为零或非零就跳转的指令,非常常用,靠近硬件是C语言的优势,也是劣势——汇编语言本来就是违反直觉的。

        现在最先进的编译器已经能对这种条件里面赋值的情况做出警告了吧?

(这里是结束)

http://www.lryc.cn/news/176593.html

相关文章:

  • 十五、异常(1)
  • Redis 哨兵模式搭建教程
  • 【C++】gnustl_static 与 c++_shared 的区别
  • 怎样选择第三方检测机构获取功能测试报告?
  • 【@PostConstruct、 @Autowired与构造函数的执行顺序】
  • 用vite搭建vue3+ts项目
  • 前端求职指南
  • datax同步数据翻倍,.hive-staging 导致的问题分析
  • DataGrip 恢复数据
  • 【深度学习实验】前馈神经网络(一):使用PyTorch构建神经网络的基本步骤
  • 【Unity】LODGroup 计算公式
  • 【数学建模】2023华为杯研究生数学建模F题思路详解
  • docker 安装 nessus新版、awvs15-简单更快捷
  • 使用API Monitor工具巧妙探测C++程序中监听某端口的模块
  • vue-grid-layout移动卡片到页面底部时页面滚动条跟随滚动
  • git查看自己所在的分支
  • 竞赛 基于视觉的身份证识别系统
  • Redis的softMinEvictableIdleTimeMillis和minEvictableIdleTimeMillis参数
  • 向量数据库库Milvus Cloud2.3 的QA问题
  • 嵌入式 - 经典的有刷电机和先进的无刷电机
  • 【力扣2154】将找到的值乘以 2
  • C++ —— 单机软件加入Licence许可权限流程(附详细流程图、详细代码已持续更新..)
  • Windows 下 MySQL 8.1.0 安装及配置图文指南,快速搭建实验学习环境
  • Linux内核顶层Makefile的make过程总结
  • C语言每日一题(9):跳水比赛猜名次
  • L10 数据库
  • 前端面试:01.图中输入什么?
  • Oracle拉链表
  • Git 代理(Proxy) 配置
  • C++,对象赋值与对象拷贝的区别、深浅拷贝