首页 » C语言解惑 » C语言解惑全文在线阅读

《C语言解惑》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行的“;”语句什么也不做。

由此可知,包含头文件的语句没有“;”号,其他语句必须以“;”结束。当然,主函数不是语句,它的“)”号之后更不能有分号。

关于函数和判别语句,暂不讨论。对于入门,目前掌握这些就足够了。