1 有关说明
为了让编写的C语言程序更加规范、符合工程生产项目特别需要严谨、清晰、易懂、无歧义的实际情况,考试系统有意做了严格的处理:
(1)C(包括TC、VC、GCC)编译器在编译时将对考生上传的程序实施较严格的检查,警告的信息比软件安装完成后默认设置下报告的更多。
(2)将警告作为错误对待,视为程序有错而停止编译,直接给0分!
实际上,考生自己的计算机上可能也有警告信息(取决于你对VC、TC、GCC编译器的警告级别设置),尽管警告信息并不影响编译、链接,只是提示可能有问题(从实际情况看,很多警告信息所报告的问题的确不影响程序的计算结果),但考试系统进行上述处理的目的,是有意为了让考生养成严谨的编程习惯,消除程序中可能引起问题或理解歧义的任何警告信息,让程序更容易被理解、更规范,避免以后在实际的工作中因小的细节问题造成重大事故。
因此,为了让你的程序能更容易通过考试系统的编译检查,建议在本机上调试程序时打开较为严格的编译警告选项。
2 举例
(1)如何消除程序中的警告信息,让设计的意图得到准确无误的表达
以下程序段在编译时将报警告提示:warning C4244: '=' : conversion from 'float ' to 'int ', possible loss of data。
float chengJi = 95;
int dengJi;
dengJi = chengJi / 10;
该警告提示的含义是:进行“=”(赋值)操作时,将float类型数据(chengJi / 10的结果是float型)转成int类型(存储、赋值给int类型的dengJi)时,可能丢失数据(不是一定会,但此处肯定会,因为9.5变成了9)。从工程的严谨、明确无二义的角度出发,建议按以下方法消除此警告提示,向源程序的使用者表明原设计者已注意到此问题并确认设计正确(本设计的意图就是要丢掉小数,实现将百分制成绩转换成等级,因此无问题——否则可能就有问题)。
dengJi = (int)(chengJi / 10);
(2)考试系统给出的警告信息实例及解读
程序传上去后,若有以下类似的评分报告,则应是考试系统有意严格要求所致:
Warning .c 18: Call to function 'fac' with no prototype in function main——警告:在程序的第18行,main函数中调用函数fac时没有找到该函数的原型声明
Error .c 18: Too many error or warning messages in function main——错误:在程序的第18行,main函数中有太多的错误或警告信息(程序停止编译,当然不可能运行)
.c(55) : warning C4098: 'main' : 'void' function returning a value——程序的第55行有警告:main函数定义为void,但是却返回了一个值(在第55行),是不妥的
.c(55) : error C2220: warning treated as error - no object file generated——程序的第55行有错误:警告(刚才的)被当作错误对待,因此没有编译链接的目标文件产生(程序当然不可能运行)
实际上,要处理这样的告警信息并不难,仔细看看评分系统给出的提示,就能解决问题。不要一看到英文就认为自己不认识、不看,仔细瞧瞧,连猜带蒙,这些句子一般都知道大概意思,实在看不懂的,则至少应从中知道问题是由哪一行导致的,仔细检查该行也很可能就发现了问题所在。
|