讀古今文學網 > C語言解惑 > 1.5 別把分號放錯地方 >

1.5 別把分號放錯地方

分號「;」並不總是出現在語句的尾部。如下的寫法


#include <stdio.h>
;
  

雖然可以通過編譯並能正確運行,但會出現如下警告信息:


warning C4067
: unexpected tokens following preprocessor directive - expected a newline
  

C語言標準規定一行可以有多條語句,例如:


int a
; double d
; char c
;
  

但輸入輸出不是C語言的一部分,而是以標準函數形式提供。在每個引用庫函數的源程序文件的開頭處必須含有如下一行。


#include <stdio.h> 
  

文件stdio.h定義了I/O庫所用的某些宏和變量,使用#include語句把它包含進來,一起編譯。雖然有的C編譯器使用scanf和printf函數不需要包含它,但建議養成使用這條語句的習慣。其實,一條預編譯語句是以換行作為結束的,也就是說,一行只能書寫一條預編譯語句,如果書寫兩條,也會給出如上警告。

包含語句屬於預編譯語句,「;」號作為語句結束符用在一條程序語句之後,而包含語句不是程序語句,它不是以「;」號作為結束符。這裡多出一個符號,編譯系統認為你應該從「;」號處換行,以便保證預編譯語句正確,所以給出警告信息。這與語句漏掉「;」號不同,如果語句尾部漏掉「;」號,就不是給出警告信息,而是給出出錯信息。例如:


printf
("
輸入x
:"
)
scanf
("%Lf"
,&x
);
  

會給出如下出錯信息:


error C2146
: syntax error 
: missing '
;' before identifier 'scanf'
  

這條信息明確指出在scanf語句之前漏掉分號,也就是printf少了語句結束符「;」。

如果程序中多用了「;」號,則「;」號構成跳空語句,即


printf
("
輸入x
:"
);;
  

相當於


printf
("
輸入x
:"
);
;
  

兩條語句,第2行的「;」語句什麼也不做。

由此可知,包含頭文件的語句沒有「;」號,其他語句必須以「;」結束。當然,主函數不是語句,它的「)」號之後更不能有分號。

關於函數和判別語句,暫不討論。對於入門,目前掌握這些就足夠了。