分號的使用是初學者往往容易犯錯的地方,要么少了分號,要么多了分號。少了分號多見於定義變量和給變量賦值的時候,而多了分號則多見於分支結構和循環結構中。如程序段1、2、3所示。
//程序段1,在定義變量和賦值時少了分號
1 int a,b
2 a=20;
3 b=30
//程序段2,分支結構中多了分號
1 if(a>b);
2 printf("%d",a);
//程序段3,循環結構中多了分號
1 while(a<50);
2 a++;
3 for(i=1;i<10;i++);
4 b++;
那么,究竟在什么時候該使用分號,什么時候不該使用分號呢?許多資料列舉了使用分號的不同情況,但是未能觸及本質,也給學習者帶來了記憶上的負擔,有些書籍則避而不談,只是通過學習者對示例程序的模仿而形成的“語感”來決定是否使用分號。
其實,只需弄清分號在C語言中的含義,什么時候使用分號的問題就迎刃而解了。在C語言中,分號表示語句的結尾,意即一個分號表示着一句具有完整意義的C語句的完結。而什么是“具有完整意義的C語句”呢?即是意思明確,說完了一件事情,完成了一個操作的C語句。
如程序段1中的“b=30”,表示將30賦值給變量b,意思完整,操作完成,因此需要加上分號。而程序段2本意是想表達如果a大於b,那么打印a,而示例的寫法卻告訴計算機“if(a>b)”是一個完整意義的C語句了,完成了一個操作了。這在語法上是沒有錯,而卻與程序設計者的初衷相去甚遠,此時的含義已經變成了如果a大於b,那么什么都不做(因為分號前沒有任何操作)。程序段3也是如此。
循環結構還有一種do-while語句,其結構形式如下所示。
do{
程序段S
}while(表達式P);
這處while后的分號是必不可少的,為何?因為此處已經將完整的意思表達清楚,如果不加分號,那么計算機就會將這部分與此后的代碼誤認為是同一句語句,造成表意不清的錯誤。
其實,C語言的語法都有其設計的原理和背景,如果能多了解這些原理和背景,那么語法就不再是需要死記的憑空生出來的規則,而是自然的邏輯演繹的結果。