
1.8 学着在代码上做实验
把这个简单的程序写对之后,我们现在应该学习的是怎样故意破坏它,看看编译器会给出哪些错误消息。当然,有时这些消息的含义并不是十分清晰,尤其是在这种故意写错代码的情况下。
等到你能够熟练掌握这门语言之后,就没有必要再这么做了。但是,在你没有达到这种程度之前,这样做是很有意义的,因为这可以帮助你熟悉编译器所给出的各种错误消息,让你不用再花几个小时乃至几个星期的时间调试某些问题,在采用迭代式的程序开发流程来制作程序的过程中,我们可能会在一开始就遇到此类问题。所以千万不要跳过这个很关键的练习,它能够在你学习C语言的过程中帮你节省许多时间。
现在就请大家完整地依照早前讲述的程序开发流程分别执行下面几项实验,以便在源代码中制造相关的错误。看到编译器所报告的错误消息之后,你要试着把这些消息与实验中所制造的错误联系起来。每做完一项实验,你都应该将代码恢复到正确形式,然后重新编译、运行以验证程序的效果:
□把{从hello2.c里面删掉,保存并编译文件。编译器会报告什么样的错误?
□把{放回原来的位置,然后把}删掉。这次编译器会报告什么样的错误?
□除了{}之外,还有三组符号也是成对出现的,即<>、()与""。其中,()出现了两次。如果你把某一组符号的左字符删去,那么编译器会报告什么样的错误?如果你删去的是右字符,那么编译器会报告什么样的错误?每删掉一个符号并做完实验之后,都要把这个符号重新写回去。
□分别将第一个分号(;)与第二个分号删去,看看编译器在这两种情况下会给出什么样的错误信息。
□把return 0;这一行注释掉[1],看看编译器会报告什么样的错误。
□把int main()改成int MAIN(),看看编译器会怎么样。
□把printf(改成printout(。这次不仅编译器会给出警告,而且你应该会看到链接器也给出了错误信息。
□把#include<stdio.h>注释掉。这次你应该会看到,链接器说它找不到printf()函数[2]。
□把hello2.c恢复至初始状态。编译并运行程序,然后验证程序的功能是否正确且完整。
如果你也像笔者在1.3.5节中说的那样,让编译器报告出23000条错误消息,那我可真想看看是怎么回事,请你把详细的实验过程发到我的电子邮箱。
[1] 所谓注释掉(comment out),意思是让它从普通的代码变成注释,例如可以给它前面加上//,或用/*与*/将其包裹起来。——译者注
[2] 有时依然能顺利地编译并链接,只是编译器会给出相关的警告信息与提示信息。——译者注