我试图在一个项目中设置一个简单的划分,在 STM32F10x 上我做了什么:
假设我有一个浮点变量:
float f =0.0;
.............
Run Code Online (Sandbox Code Playgroud)
当我使用f这种方式时:
f = 20/5 ;
Run Code Online (Sandbox Code Playgroud)
该程序无法使用f除法结果的值,我在程序中的多个其他函数中使用该值,但它们都不起作用,这意味着我没有收到错误,但程序没有工作 。但当设置值时:
f = 4 ;
Run Code Online (Sandbox Code Playgroud)
一切正常!
知道为什么吗?我用过: f = (float) 20/5 ;
编译器将所有不带后缀的浮点数视为double.
这在 STM32/ARM 上会崩溃。
使用后缀 iow 20.0f。
你的强制转换之所以有效,是因为结果可以在编译时确定。如果没有的话,它会再次爆炸。