读书人

C语言常见的程序异常

发布时间: 2012-02-19 19:43:38 作者: rapoo

C语言常见的程序错误
1、丢失分号
每个C语句都必须以分号结尾。丢失分号可能引起编译器的混淆,导致“丢失”错误消息。请看下面语句:
a = x + y
b = m/n;
编译器将把第二行作为第一行的一部分,把b看作是一个变量。因而得到在第二行的“未定义变量名”错误消息。注意,消息和位置都是不正确的。在这种情况下,所报告的行没有错误,就应检查前一行是否丢失了分号。还有就是当丢失分号时,可能导致编译器“疯狂”运行,产生一系列的错误消息。如果发现这种可疑错误,在错误列表的开始处检查是否丢失了分号。
2、误用分号
请看下面代码:
for ( i = 1; i <= 10; i ++ );
sum = sum + i;
该代码用于把1-10的所有整数加起来。但实际结果是只有i的最后“退出”值加到了sum上。这种错误的其他一些情况有:
(1)while ( x < max );
{
....
}
(2)if ( T > = 2000 );
grade = 'A ';单个分号表示的是空语句,因此语法上是合法的。编译器不会产生任何错误消息。可见,这种错误比语法错误更糟糕。
该用 == 而误用 =
当要执行一个关系测试时,很可能忘了使用双等号。例如:
if ( code = 1)
count ++;
这句语句在语法上是合法的。变量code被赋值1,然后,因为code = 1为真,因而count递增。实际上,上面代码不会对code做任何关系测试。不论code的值如何,总是会运行count ++语句。
在其他控制语句(如for和while)中,可能发生类似的错误。在循环控制语句中的这种错误可能会导致无限循环。
3、丢失括号
在编写深度嵌套的循环时,往往会忘了加闭括号。这往往能被编译器检测到,因为开括号的数目应与闭括号的匹配。但是,如果把匹配的括号放在了错误的地方,编译器不能发现这种错误,程序将产生不可预知的结果。
括号的另一个严重的问题是,当多个语句要组合在一起时,没有使用括号。例如,请看以下语句:
for ( i = 1; i <= 10; i ++)
sum1 = sum1 + i;
sum2 = sum2 + i*i;
printf( "%d %d ",sum1,sum2);
上面代码本意是计算从1 - 10、步长为1的sum1和sum2,然后显示其值。但实际上for循环只是把第一个语句作为其循环体,即:
sum1 = sum1 + i;
因此,语句
sum2 = sum2 + i*i;
只是在循环退出时计算了一次。这个代码段的正确编写方法是如下添加括号:
for ( i = 1; i <= 10; i ++)
{
sum1 = sum1 + i;
sum2 = sum2 + i*i;
}

printf( "%d %d ",sum1,sum2);
如果只有一个括号,那结果将是不可预知的。
4、丢失引号
每个字符串都必须用双引号扩起来,而单个字符常量则用单引号。如果遗漏了引号,那么字符串或者字符将被当作一个变量。例如:
if ( response == YES)
Grade = A;
这里YES和A都被看作为变量,因此会出现“为定义变量名”的错误消息。
5、误用引号
只要处理单个字符,就可能使用单引号。应小心确保有关的变量已经正确声明了。例如,如果city已经声明为char类型变量,那么下面语句
city = 'M ';
是不合法的。


转http://bbs.csai.cn/bbs/view.asp?Id={05EC68A6-EC51-41B9-B057-893ADA7DA5A2}

[解决办法]
mark
[解决办法]
嗯?
[解决办法]
mark
[解决办法]
真的不 收藏 tks, lz

[解决办法]
mark

读书人网 >C语言

热点推荐