1 问题
在GCC编译c语言工程,如果工程中存在使用%f打印浮点型数据的操作。会发现浮点型数据打印不出来。
2 原因
- 在gcc中float, double型数据一律处理为单精度(4 bytes)。
- GCC为了缩减编译后的代码尺寸,使用的是不打印%f的printf。
- GCC 当中提供了若干个版本的 printf/sprintf,在大尺寸版本下还是有可能支持 %f 的。
3 解决方法
方法一
在makefile的# Linker flags里面添加如下编译选项:
# printf float
LDFLAGS += -lc -lrdimon -u _printf_float
方法二
自己编写一个将浮点型转换成字符串型的函数,然后使用字符串的方式打印。
方法三
放大float型的数值,可以放大10、100、1000…倍,将float的数值变成整形,然后采用整形的方式打印。