您的位置:首页 > 其它

分号不是个“随便的人”

2016-03-09 15:32 274 查看
分号是个很不起眼的东西,但在C语言编程里面,它的作用不可忽视,多写与漏写都会造成不可预料的错误,下面就列举一些常见的错误。

1、多谢了分号

if或while语句块内如果只有一条语句,那么可以省略大括号的书写,然而,当他们的条件判断框后面不小心加了一个”;”时,会使本来想要在if或while条件成立时执行的语句替换成了一个空语句,把原来要执行的语句“挤到了”if或while语句块外面,使其不管if或while的条件成立与否,都会执行

int main()
{
int a = 0;
if (a == 0);
printf("a = %d\n", a);
printf("a != 0, a = %d\n", a);
system("pause");
return 0;
}


上面程序的本意是当a = 0时,输出a = 0;当a != 时,输出a != 0,a = n(n是此时a的值)

但因为if的判断框(一对())后面多写了一个“;”,编译器就把”;“这个空语句当做了它后面要执行的语句,使printf(“a = %d\n”, a);无论如何都会执行,改变了程序的初衷。

2、漏写了分号

①当一个自定义的类型在定义时忘了在结尾加上分号,且它的下面跟的是一个没有写返回值的函数时,那么编译器会误把这个自定义的类型当成函数的返回值类型,造成不可预料的错误

struct P
{
char c;
int i;
double d;
}
fun()
{
printf("fun()是一个无参无返回值的函数\n");
return;
}


上面这段代码,函数fun()在设计时是不给返回值的,然而因为定义结构体类型时忘记在结尾处加分号了,使此结构体类型成了函数fun()的返回值类型。

②少了一个分号使函数的返回值发生改变,并对函数逻辑发生错误。

int a = 0;
if (a == 0)
return
a += 10;
a -= 10;
a *= 10;
a /= 10;


假定上面的代码是一个函数的一部分,那么本意是当a = 0时,函数直接返回调用函数,a != 0 时,函数执行return下面的四条语句,但因为return后面漏写了分号,错误的把a += 10作为返回值,使a = 0时返回10,当a != 0时,函数也只能执行a += 10/下面的三条语句。使函数的逻辑发生了很大的改变。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: