程序规范
时间:2016-12-14作者:华清远见
在同学们平时学习的过程中,通常没有良好的程序规范。由此导致了很多奇怪的错误。在一次日常解答问题的过程中,我遇到了如下问题。 一位同学使用静态库封装了一个函数:函数的功能是将两个double类型的变量的和求解返回: 通过命令编译该代码: gcc -c add.c -o add.o 制作静态库: ar rcs libadd.a add.o 在一个文件中调用这个静态库中的add函数,求两个浮点数的和,并输出。 使用如下命令编译: gcc main.c -o main -ladd -L. 该同学未使用-Wall参数,因此未出现任何警告和提示。结果输出让他十分意外: 于是,他又换了一组数字测试,结果如下: 输出结果如下 他很奇怪为何在库函数中结果是正确的,但返回到主函数中就出现错误。 其实,要是在编译时打开-Wall的标记,他会看到更多的提示信息: 编译器提示函数add是隐式的声明,也就是说无法确认其参数类型和返回值类型。当添加了函数声明后,该问题就解决了: 添加文件add.h 在主函数中包含此头文件: 再次编译主程序: gcc main.c -o main -ladd -L. -Wall 运行结果如下图: 程序运行正常。 编译器在不知道函数类型声明的情况下,会将其返回值默认定义为int类型,所以会造成程序结果与预期不符的的情况。 总结: 在实际编程过程中,一定要注意编写规范。该有的声明一定要有;需要编写头文件的,一定不要偷懒;编译选项一定要跟上-Wall。很多时候编译器会帮助你检查错误。
发表评论
|