阅读以下三个程序,进一步理解上节所介绍的C语言语法要素。
/*程序1-3:计算并输出一个整数的平方*/
/*程序1-4:输入两个整数,输出其中较大的整数*/
/*程序1-5:输入一个负实数,输出其绝对值*/
请编辑、编译、链接、运行以上3个程序,看看会遇到什么问题。
初学者常见的编译错误如下:
(1)遗漏分号;
(2)遗漏scanf()或printf()中的双引号;
(3)遗漏逗号;
(4)缺少必需的空格,如把“return 0;”写成“return0;”;
(5)缺少花括号。
在编译阶段,当编译器发现某些内容无法编译时,会停止工作,并给出错误提示,指出问题出在哪里。例如,将语句
int a,b,max;
误写成了
int a,b,max
VC 6.0编译器会给出以下错误提示,如图1-5所示。
图1-5 编译错误提示
编译器指出第7行scanf前缺少分号,而实际上是第5行的声明语句遗漏了一个分号。编译器所给错误消息为何与实际不符?原因在于,编译器并不关心换行符,上一行末尾的分号也可以放在下一行的开头,编译器读了第5行之后,它在期待一个分号,它跳过第6行的空行,在遇到第7行的下一个命令时,才能确定遗漏了一个分号,因此指出第7行有错。多数情况下,编译器能准确指出出错的位置,但如果在编译器所指示的行中找不到错误,通常错误是在前一行。
若在printf()函数中遗漏了双引号,VC 6.0编译器给出的错误信息如图1-6所示。
图1-6 编译错误提示
编译器给出15条错误提示,第一条错误提示正确指出了错误,unknown character意味着编译器无法识别一些符号,因为它们没有被双引号括起来。只要修改了该错误,程序就能顺利通过编译。我们得到的经验是,如果编译器报告了多个错误,首先要找到第一个错误,修改并重新编译,这个过程可能要重复多次,直到将编译器指出的所有错误修改完。
链接阶段的错误较少,通常是由于拼错函数名引起的。例如,把main写成mian,把printf写成print。