我在某些代码中遇到过这一行,无法找到在任何地方定义的语法:
*(float *)csCoord.nX = lImportHeight* .04f; /* magic number to scale font size */
如果我从 f
中删除 .04f
,则编译器会发出警告,说明由于从'double'转换为'float'而导致数据丢失。我假设 f
正在进行某种类型转换。
有没有人见过这个?这在C标准中定义了什么?
答案 0 :(得分:10)
尾随f向编译器指示它是一个float类型的文字,就像“”表示文字字符串而L后缀表示一个long int。
答案 1 :(得分:2)
没有“f”,数量0.04是双倍。当你用一个双倍的lImportHeight时,你得到另一个双倍。然后将它存储在浮点大小的内存位置,从而失去精度。对于“f”,0.04f是浮点字面值。你有多个lImportHeight,你得到一个浮动;然后分配不会导致精度损失。
答案 2 :(得分:0)
不知道它在标准中的定义,但是使用f
表示浮点数,否则编译器会认为它是双精度数。类似地,您可以通过添加u
或长l
(小写字母)等来指定要无符号的整数。
答案 3 :(得分:0)
究竟是什么问题?你的编译器是否会阻塞.04f?试试
(float) .04