stm32里,float类型返回出错
·
一、问题重现
当我在编写算法时,一个函数float Get_ACC_mg(uint8_t add),会将加速度换算成mg,返回浮点数,结果发现无论传入什么值,返回的都是24.000,很奇怪,我试着返回固定的一个浮点数也不行,更换成double也是一样的情况。
二、问题解决方式
最后发现,只要在对应的h文件里声明该函数,然后包含该h文件。
三、问题原因
当你没有包含头文件的时候,或者没有对函数进行声明的时候,编译器是怎么做的呢?
-
猜谜:编译器看到你在调用一个它不认识(没有声明)的函数时(发生在跨文件调用),会自己"猜"这个函数的样子
-
默认猜int:编译器最常用的猜测是"这可能是个返回int类型的函数"
-
错误处理:于是编译器按照int类型来准备接收返回值
之后生成二进制可执行文件时,链接器会寻找到匹配的函数定义,进行链接,但是之前的目标文件已经按照int型进行参数推断了,所以数据会按照int型进行存储和传递。
这就会导致浮点数返回时出错。
所以一定要养成提供给外部调用的函数要在h文件里进行声明,使用的地方要包含该h文件的习惯。
更多推荐
所有评论(0)