2.1 理解函数声明
关于这一点,请参看
http://blog.chinaunix.net/u/5391/showart_239301.html 和
http://blog.chinaunix.net/u/5391/showart_238185.html
这两篇文章
2.2 运算符的优先级问题
c语言运算符特别多,优先级也特别多,而且结合性有的从左到右,有的从右到左,一个不留神,就把逻辑关系搞错了,造成了非常隐蔽的错误,在笔者看来,解决这类问题的有效方法就是加括号,但括号多了也不 好,我们记住下面的两个原则:
一、任何一个逻辑运算符的优先级低于任何一个关系运算符
二、移位运算符的优先级比算术运算符低但比关系运算符高
记住了上面的两个原则,再配合括号,这个c语言运算符优先级问题基本可以解决了。
2.3 注意作为语句结束标志的分号;
有两个地方容易犯这种错误,一个是判断语句中多了分号,比如
if ( x > y ); //这里多了一个分号
func();
还有一个就是结构或者联合的声明中少分号
struct point
{
long x;
long y;
} // 这里容易少分号
2.4 switch 语句
对于switch语句,我们最常见的错误就是少了break;语句
2.5 函数调用
有的语言,函数调用过程中,如果没有参数,可以省略括号,但是对于c语言,即使没有参数,括号
也不能省。
2.6 "悬挂" else 引发的问题
看下面的例子:
if ( x == 0 )
if ( y == 0 )
error();
else
{
dosomething();
}
从这里代码的缩进我们可以看出本意是分为x 等于0 和 x不等于0 的情况,可是实际上else却是y不等 于0的情况。由于y不等于0的else分支的悬挂,c语言中if和最近的else语句结合,导致了这种问题,对 于这种问题,最好的方法就是加大括号
if ( x == 0 )
{
if ( y == 0 )
error();
}
else
{
dosomething();
}
加了大括号之后,大括号里面的是一个语句块,在语法上相当于一条语句。
阅读(1214) | 评论(0) | 转发(0) |