当前位置: > 华清远见教育科技集团 > 嵌入式学习 > 讲师博文 > 程序规范
程序规范
时间: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。很多时候编译器会帮助你检查错误。

发表评论
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)