C++感受3-做一个“会”犯错误的程序员

学习C++常见编译错误的等级与分类,提前“见识”初学者容易犯的具体错误,并归纳看似不同具体错误之后的共同点,做到心中数,精准预判自己未来会犯的错误…… 

1. 警告和出错

1.1 Warnning

警告:编译器认为代码写得不合理,但符合语法,可以通过编译,但程序运行可能产生意外的结果。

一个 char 类型的数据,在多数平台上,只能存储 -128 ~ 127 范围的数值,但代码将 128 赋值给一个 char 数据,即可获得一个警告:数据溢出;而不是一个错误。

1.2 Error

出错:即代码存在语法错误,无法通过编译。比如:将一个整数,赋值给一个字符串类型的数据。

2. 声明和定义

现实生活中我们做不少事情,会有一个规划或设计的阶段,此时并不需要将做此事所需要的所有事物,都摆在眼前,才能做这个规划或设计。

比如,你想为新房配置一个彩电。那么,你可以做如如下两个 “声明”。

  • 声明一:主卧这面墙,将挂一块 100 吋的超薄彩电,品牌为 瑞幸;
  • 声明二:客厅这面墙,将挂一块 200 吋的超薄采电,品牌为 华为;

这就叫声明。声明虽然不是实物,但描述得越具体越好。比如上例,可认为是描述了几个特征:

  1. 电器类型(彩电)
  2. 外观特点(超薄)
  3. 关键指标(100吋和200吋)
  4. 品牌(瑞幸、华为)

实际还可以加上颜色、价格等特征描述……试想,如果设计师问你家里要不要电视?你回答“随便”;问你彩电你喜欢什么品牌?你回答“随便”;问你想要多大的,你回答“随便”……除非遇上“大师”,否则,普通的设计师都不敢接你的活。

C++是一门严谨的语言,讲究凡事要有出处(参看隔壁课堂:从机器指令到高级语言 )。代码里要用到某个数据,如果既不给出实物(定义,defined),又不给出相对详细的说明(声明,declared),通常就会报错误。

假设设计师(相当于编译器接受你以上关于电视的声明,开始做相关设计;甚至,为了做出更好的设计效果真,他甚至可以请师傅切割硬纸板,做两个尺寸分别是100和200的假电视,挂在墙上,东看看、西看看……

一切都挺好,然后,真的要开始装修时,负责办理物料实施工发出施工错误报告:

  • 错误一:市场上有 100 吋的超薄彩电,但没有瑞幸品牌的彩电;
  • 错误二:市场上有华为超薄彩电,但他们家暂时不生产200吋的。

负责实施的工队,就叫链接器。此处的“链接”,就相当于将设计中要用到的各种东西,都一一落实并组装起来。每一个用到,且能落实的事物,就叫 “有定义的(defined)”对象;而找不到的东西,叫 “未定义的(undefined)”对象。

所以,请理解上面的错误,实质是在表达:

  • 瑞幸牌的100吋超薄彩电——抱歉,未定义!
  • 华为家的200吋超薄彩电——抱歉,未定义!

上面报的两个错误,可以叫“链接”错误。

不过,广义上的“编译”,也包含了“链接”过程,因此本文将上述的错误,也称为编译错误。

3. 课堂视频

ffls06-做一个会犯错误的程序员

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南郁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值