C/C++培训
达内IT学院
400-996-5531
本期讲讲工作以来,自己碰到或者他人碰到的几个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)。
填写下面表单即可预约申请免费试听!怕钱不够?可就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!
Copyright © 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有
Tedu.cn All Rights Reserved