1、=不等同于==

在刚接触c语言的时候,这属于是初学者常见的错误。

=是赋值符;==是关系运算符。·

当我们在使用if判断语句的时候,初学者很容易犯的一个错误,就是把if(x==1)写成if(x=1)这样写时编译器并不会报错,因为后者会被解析为把1赋值给x,然后再拿x的值去判断真假,也就是if(1)然后被判断为真,我们通常会耗费大量精力去寻找这个bug。所以我们可以通过一些办法去避免这个bug。

当我们在使用if语句时,把if(x==1)改为if(1==x)。这是一个好的编码习惯,因为赋值操作符只能从右向左赋值,如果我们把==写为=时也就是if(1=x)会因为左值是常数无法赋值而报错,我们就能很容易的找出这个错误。

2、八进制数的缺陷

我们知道在一个整数前面前导0x会被解析为十六进制数,在一个整数前面前导0会被解析为八进制数,我们都知道八进制数中遇到8就会进位也就是正常情况下不会出现8,9这两个数字,但是有些编译器会把8,9这两个数也作为八进制的数字进行处理

0195的含义是

1*8^2+9*8^1+5*8^0=141(十进制)

我们要在编程中去注意这个情况

3、运算符的优先级问题

如果我们要把一个整数hi向左移位4位,再加上一个整数low时我们很自然就会这样写。

r = hi<<4 + low;

但是很可惜这是一个错误的代码。因为+的运算优先级是要高于移位运算符的。所以,实际上的运算变成了

r = hi<<(4 + low);

运算符优先级

运算符的优先级有一个非常好记得一个规则算数>移位>关系>逻辑。单目>双目>三目。

但是这也只是大概的规律,要准确地记住每个运算符的优先级还是非常困难的,所以我们在进行编写代码时,就要避免这种复合的语句,这样的语句虽然会省出代码行数,但是会很容易出现错误,而且会给后来读代码的人造成很大的困难,得不偿失。

我们要把这些符合的语句拆开写就可以避免很多麻烦的错误。

hi<<=4;

r = hi + 4;

或者r = (hi<<4) + low;

这样去避免出现这样的错误,也能提高代码的可读性。

4、switch语句

switch(color)

{

case 1:printf("yellow");break;

case 2:printf("red");break;

case 3:printf("blue");break;

}

这就是我们平时使用switch语句的形式。也就是说当color=2时,编译器输出的是red。

但是当我们把break去掉。也就是这样。

switch(color)

{

case 1:printf("yellow");

case 2:printf("red");

case 3:printf("blue");

}

这是当color=2时,编译器输出的是redblue,因为没有了break语句,所以在case2进入之后并没有跳出switch语句,然后输出了blue。

这个可以是看作是c语言的一个特性,因为这样的设计并不全是坏处,可能会因为缺少break造成一些问题,但是也可以通过这样的特性写出其他语言没法进行的特殊操作。也就是在程序员在特意的省去这样一个break时,会达成一种特殊的运算结果。但是我推荐大家在使用这种方法时一定要在后面加上注释。

switch (x)

{

case 1:printf("hello");

/*此处没有break语句*/
}

这样也会方便去阅读

C语言常见的陷阱与缺陷相关推荐

  1. C语言常见困惑、错误集锦(上) ——《C陷阱与缺陷》3篇

    AndrewKoenig自己在Bell实验室时发表的论文为基础,结合自己的工作经验扩展成这本对C程序员具有珍贵价值的经典著作.写作本书的出发点不是要批判C语言,而是要帮助C程序员绕过编程过程中的陷阱和 ...

  2. C语言三剑客-C和指针、C专家编程、C陷阱和缺陷

    阅读这三本书,记录一下平时没注意的细节点,持续更新- C和指针 数据 1.四种基本类型是 整型.浮点型.指针.聚合类型(数组和结构等) 2.整型字面值缺省情况下是能完整容纳这个值的最短类型 3.字面值 ...

  3. C语言三剑客之《C陷阱与缺陷》一书精华提炼

    点击上方"大鱼机器人",选择"置顶/星标公众号" 福利干货,第一时间送达! 1.C陷阱与缺陷概述 C语言像一把雕刻刀,锋利,并且在技师手中非常有用.和任何锋利的 ...

  4. c语言局限性,C语言陷阱与缺陷.pdf

    C 语言陷阱和缺陷[1] winxos 11-01-28 winxos 11-01-28 原著:Andrew Koenig - AT&T Bell Laboratories Murray Hi ...

  5. c语言 去掉双引号_技术分享|浅谈C语言陷阱和缺陷

    良好的软件架构.清晰的代码结构.掌握硬件.深入理解C语言是防错的要点,人的思维和经验积累对软件可靠性有很大影响.C语言诡异且有种种陷阱和缺陷,需要程序员多年历练才能达到较为完善的地步.软件的质量是由程 ...

  6. C 语言陷阱和缺陷(一)

    CSDN话题挑战赛第2期 参赛话题:学习笔记 文章目录 前言 简介 第一部分:词法缺陷 1. 1 = 不是 == 1.2 多字符记号 1.3 多字符记号一些例外说明 1.4 字符串和字符 第二部分:句 ...

  7. 写给大数据从业者:数据科学的5个陷阱与缺陷

    来源 | AI 前线 作者 | 陈炬,责编 | Carol 出品 | CSDN云计算(ID:CSDNcloud) 导读: 这篇分享主要总结了数据从业人员在实践中可能遇到的陷阱与缺陷.跟其他新起的行业一 ...

  8. 《C陷阱与缺陷》一第1章 词法“陷阱”1.1 =不同于==

    本节书摘来自异步社区<C陷阱与缺陷>一书中的第1章,第1.1节,作者 [美]Andrew Koenig,更多章节内容可以访问云栖社区"异步社区"公众号查看 第1章 词法 ...

  9. 【知识点总结】-《C陷阱与缺陷》

    目录 第一章:词法的陷阱 1.1."="与"=="不同: 1.3词法分析的"贪心法": 1.4整型常量: 1.5字符与字符串: 第二章:语法 ...

  10. 《C陷阱和缺陷》总结

    <C陷阱和缺陷> 第一章 1.1 =不同于== 在C语言中,=作为赋值运算,符号==作为比较,一般而言,赋值运算相对于比较运算出现的更加频繁. 同时,在C语言中赋值运算符号被作为一种操作符 ...

最新文章

  1. 【组队学习】孙健坤:基于Python的会员数据化运营
  2. elasticsearch update 无结果
  3. linux安装显卡驱动的run文件,Linux系统下安装NVIDIA显卡驱动(run格式文件)
  4. 双击treeView的节点时使不展开不折叠子节点
  5. 【numpy】numpy.ones()函数
  6. 26muduo_net库源码分析(二)
  7. 快速掌握用python写并行程序_自己python程序的并行修改
  8. 机房电脑怎么批量修改计算机名,批量设置IP地址和计算机名
  9. 四阶段课堂总结解决问题
  10. 【web设计居家必备】迷你图标大集合
  11. Win11游戏模式怎么开启?Win11开启游戏模式的方法
  12. Filecoin系列 - 源码分析 - CPU SHA扩展
  13. Scrapy爬取IT桔子死亡公司库及资本机构数据
  14. 深入Array.prototype.slice()方法
  15. SpringBoot集成支付平台
  16. STM32驱动直流电机
  17. 程序员从普通二本毕业的真实薪资,记录一路走来的路
  18. 【题】【贪心】NKOJ3827 火车运输
  19. 阿里云高校——‘学生在家实践’--云计算最全题目
  20. linux convert 命令 把gif转成jpg或png格式的问题

热门文章

  1. Autodesk 3ds Max 2011 / 3ds Max Design 2011)简体中文版 32位+64位
  2. 攻防世界 --> funny_video --> 最完整和正确的解答
  3. 使用Unicode字符集出现的错误总结
  4. 浪曦视频--工厂方法模式
  5. php去掉省市区,省市区后面的字符隐藏的php代码
  6. MySQL安装失败的原因
  7. vue开发移动端app-学习记录
  8. 市政管网检测机器人收费标准_疏通市政管道 市政管网检测 机器人管道检测价格...
  9. 生活小技巧:自己动手修理希捷 Expansion 移动硬盘
  10. 怎么用计算机求正切值的角度,在excel中如何使用正切函数计算,excel函数tan怎么反算角度...