循环语句是几乎每个程序都会用到的,它的作用就是用来实现需要反复进行多次的操作。如一个12M的51芯片应用电路中要求实现1毫秒的延时,那么就要执行1000次空语句才可以达到延时的目的(当然可以使用定时器来做,这里就不讨论),如果是写1000条空语句那是多么麻烦的事情,再者就是要占用很多的存储空间。我们可以知道这1000条空语句,无非就是一条空语句重复执行1000次,因此我们就可以用循环语句去写,这样不但使程序结构清晰明了,而且使其编译的效率大大的提高。在C语言中构成循环控制的语句有while,do-while,for和goto语句。同样都是起到循环作用,但具体的作用和用法又大不一样。我们具体来看看。
goto语句
这个语句在很多高级语言中都会有,记得小时候用BASIC时就很喜欢用这个语句。它是一个无条件的转向语句,只要执行到这个语句,程序指针就会跳转到goto后的标号所在的程序段。它的语法如下:
goto 语句标号;
其中的语句标号为一个带冒号的标识符。示例如下
void main(void)
{
unsigned char a;
start: a++;
if (a==10) goto end;
goto start;
end:;
}
上面一段程序可以说是一个死循环,没什么意思,只是说明一下goto的用法。这段程序的意思是在程序开始处用标识符"start:"标识,表示程序这是程序的开始,"end:"标识程序的结束,标识符的定义应遵循前面所讲的标识符定义原则,不能用C的关键字也不能和其它变量和函数名相同,不然就会出错了。程序执行a++,a的值加1,当a等于10时程序会跳到end标识处结束程序,否则跳回到start标识处继续a++,直到a等于10。上面的示例说明goto不但可以无条件的转向,而且可以和if语句构成一个循环结构,这些在C程序员的程序中都不太常见,常见的goto语句用法是用它来跳出多重循环,不过它只可以从内层循环跳到外层循环,不能从外层循环跳到内层循环。在下面说到for循环语句时再略为提一提。为何大多数C程序员都不喜欢用goto语句?那是因为过多的使用它时会程序结构不清晰,过多的跳转就使程序又回到了汇编的编程风格,使程序失去了C的模块化的优点。