本期讲讲工作以来,自己碰到或者他人碰到的几个C语言编码易错点。限于篇幅,这边只举了几个例子作为抛砖引玉,欢迎大家留言说说自己遇到的其他易错点。接下来提到的几个易错点的特点为看似非常基础,但是犯错的不在少数。

sizeof

sizeof是C/C++中的一个操作符,其作用为返回一个对象或者类型所占的内存字节数。敲黑板:记住了,sizeof的基本单位是字节。易错点之一为:使用sizeof去计算非char类型的数组元素个数,这是不对的。如果要统计一个数组的元素个数,可以通过如下方式:

sizeof(ArrayName) / sizeof(ArrayName[0]) 或者

sizeof(ArrayName) / sizeof(ArrayType)

"=="与"="

在条件表达式中,我们经常用"=="进行变量与数值进行比较作为某段代码执行的入口条件。但是如果编写代码时候不注意,漏写了一个"=",程序运行就与原先设想千差万别,而且编译器不会有任何告警,如果工程比较大,排查起来会非常困难。还是上面的例子:

所以,很多编码规范中,会明确设定一个规则:对于此类if表达式,规定数值写在==左侧,被比较的变量或者表达式放在==右侧。这样,即便一时手快漏写了一个=,编译的时候会产生error,迫使编码者修正。

switch...case语句

关于switch...case语句有两个易错点。一个是在case块结束后漏写了break,导致程序运行偏离预期;另外一个是,在的确需要fall

through的时候,没有进行必要的注释,导致不明真相的吃瓜程序员以为是第一种情况,随手补上了break。所以在每次进行switch语句编码的时候,记得完成后再检查一次代码,防止漏写break;另外在需要fall

through的时候,一定要有fall through关键字以及注明清楚这样写的缘由。

其他

字符型常量使用单引号括起来,字符串常量使用双引号括起来。

使用错误的逻辑表达式,如企图用if(a < b < c)表达if((a < b) && (b <

c))。

对于复合表达式,没有使用()明确优先级,导致由于混淆了操作优先级而程序非预期运行,例如if(x = z == y) 理解为if((x = z) ==

y)。

c语言中程序偏离,C语言程序员在编码时容易出错的几个点相关推荐

  1. java基本单位,Java语言中的【】是程序的基本单位。

    Java语言中的[]是程序的基本单位. 更多相关问题 机坪内设有的专门车道区域内,勤务车辆行使速度不应超过:(). 在使用电阻制动时,当电阻制动投入前列车管的压力不管是500KPa还是600KPa,均 ...

  2. 奇怪的方式c语言,C语言中奇怪的C语言特性

    3)Duff's Device http://en.wikipedia.org/wiki/Duff%27s_device 特点是switch与while交错出现.代码类似 4)同名同姓现象 在< ...

  3. c语言中程序偏离,C语言中的指针加减偏移量

    首先看一段程序: #include int main() { int a[5] = {1, 2, 3, 4, 5}; int* p = (int*)(&a + 1); printf(" ...

  4. c语言三目运算程序,有C语言中三目运算符 联系到的 程序打trace

    下面这一句是 stm库中的一句话. #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, ...

  5. c语言中全局变量内存,C语言——全局变量和局部变量在内存中的区别——及编译后的内存分区【栈-堆-全局存储区-文字常量区-程序代码区】...

    目录: 一:全局变量 二:局部变量 三:C语言经过编译之后将内存分为以下几个区域 (1)栈(stack) (2)堆(heap) (3)全局(静态)存储区 (4)文字常量区 (5)程序代码区 四:区别 ...

  6. 在c语言中下面指针,c语言指针的知识点

    在计算机科学中,指针 ***Pointer***是编程语言中的一个对象,利用地址,它的值直接指向***points to***存在电脑存储器中另一个地方的值.下面是小编为大家整理的C语言的指针知识点总 ...

  7. struck在c语言中的作用,C语言-选择题及答案.doc

    C语言-选择题及答案.doc 计算机程序设计基础(C语言) 单项选择练习题 说明:带*号的对非信息学院的同学不作要求. 一.基本概念 1. C语言程序是由 C 构成的. A)一些可执行语言 B)mai ...

  8. 二维数组在c语言中的作用,C语言中的二维数组

    1.二维数组的定义和引用 一. 数据类型 数组名[常量表达式1][常量表达式2]; (1)假如有个二维数组array[n][m],则行下标的取值范围0~n-1 (2)列下标的取值范围0~m-1 (3) ...

  9. c语言中循环体表达式,C语言的循环语句

    循环语句是用于重复执行某条语句(循环体)的语句,它包含一个控制表达式,每循环执行一次都要对控制表达式进行判断,如果表达式为真,则继续执行循环.C语言提供了3中循环语句,分别为while语句,do wh ...

最新文章

  1. 数据结构之二叉树(遍历、建立、深度)
  2. git学习——Git 基础要点【转】
  3. 技术干货 | Native 页面下如何实现导航栏的定制化开发?
  4. poj 3979 分数加减法
  5. 去越南旅游一个人玩一个月需要多少人民币?
  6. foreach delete item error
  7. POJ_3984迷宫问题(bfs基础题)
  8. 合肥青少年信息学计算机竞赛试题,合肥市第二十九届青少年信息学奥林匹克竞赛(小学组)试题及部分答案...
  9. Java性能优化面试题汇总
  10. mmd Ray渲染 mikumikudance导入模型阴影很黑
  11. ZYNQ7000 学习(二十五)纯PL 实现独立显存VGA驱动并显示画面
  12. 一个输入手机号获取验证码的页面,包含哪些测试流程?
  13. 前端安装项目报错1.gyp info it worked if it ends with ok
  14. Kotlin入门:var和val的区别
  15. 沉浸式WebXR开发技术架构
  16. python dict添加key 和value_python迭代dict的key和value的方法
  17. Android列表视图(ListView--SimpleAdapter)学习
  18. crawler:AJAX动态网页数据抓取、Selenium使用
  19. Qt3升级 -Qt论坛问答翻译
  20. lintcode backpack

热门文章

  1. esxi 7.0 封装瑞昱网卡驱动_小科普 | 无线网卡怎么选?
  2. build 之前执行task_一次NPM前端项目的CI-Build速度优化
  3. java 二维数组作为参数传递_java JNI 二维数组作为方法参数传递给本地
  4. python callback函数_回调函数callbacks
  5. 因服务器升级维护 造成不便敬请谅解,《梦幻西游》2020年5月20日维护公告
  6. anjuta 连接mysql_ubuntu系统下如何实现C/C++开发环境搭建(IDE)
  7. Java Store_java之Properties集合中的方法store
  8. 化工原理期中考,流体
  9. 有机化学芳烃 芳香性
  10. android在屏幕最下方,如何将view固定在屏幕底部?