如果你觉得本书还不错,并认同本书中的某些观点,那么我向你推荐《C 陷阱与缺陷》[2]。本书与《C 陷阱与缺陷》在内容上并没有多少相同之处,但正是通过阅读《C 陷阱与缺陷》,我才对C 语言的各种问题和现象产生了更深入的思考。《C 陷阱与缺陷》给出了控制结构中常见的三种错误,分别是:“注意作为语句结束标志的分号”、“switch 语句”和“悬挂else 引发的问题”。
关于语句结束标志的分号,我们最容易用错的一个地方就是循环语句,尤其要注意不能在for 循环语句的后面放分号,如程序6-1 第2 行。我原本想输出从0 开始的100 个数,由于有了一个分号,整个这个循环相当于在反复执行100 次空语句,然后执行一次printf,只打印出100 这一个数。
程序6-1 循环体与空语句
int i = 0;
for(;i<100;i++); /*`等价于for(;i<100;i++){;}` */
{
printf("%d\n",i);
}
while(i<100){
printf("%d\n",i);
}
do{
printf("%d\n",i);
}while(i<100);
造成这个错误的原因在于C 语言中可以定义一个空语句,这个空语句不用写任何内容,只要有一个分号就