最近有童鞋遇到一个浮点函数返回异常的问题。代码简化如下
在VxWorks里运行一下
计算结果明显不对。为啥?
看看Workbench的Build Console,有个Warning:
原来是没有声明函数aaa()
把代码改一下
再跑一次
OK,it works!
有兴趣的童鞋可以把两次的bbb.o文件反汇编出来
对比一下
对应的指令确实不一样了,不过我本科那点儿汇编知识,早就不知道去哪了...
接下来,把刚刚的类型扩展一下
再看看运行结果
ccc()和ddd()的内部操作还是正常的,但返回值溢出了;而bbb()更不幸,内部处理都乱了,说明入参就已经错了。
把返回值的长度打印出来看看:
都变成4Bytes了
看来编译器在找不到原型时,都是按32bits来处理的。
把声明都加上吧:
这次都正常了
当然了,函数声明最好还是放到头文件里,然后引用头文件就可以了。
另外,对于这典型的浮点操作,我们之前提到过,创建Task时需要包含VX_FP_TASK这个选项
良好的Coding,要消灭所有Warning,杜绝一切风险!^_^
这正是:
函数引用要声明,否则返回变整型。
编译阶段有Warning,规范编码要查清。