分号“;”并不总是出现在语句的尾部。如下的写法
#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行的“;”语句什么也不做。
由此可知,包含头文件的语句没有“;”号,其他语句必须以“;”结束。当然,主函数不是语句,它的“)”号之后更不能有分号。
关于函数和判别语句,暂不讨论。对于入门,目前掌握这些就足够了。