在C中进行类型转换的替代方法?

时间:2009-02-13 21:07:03

标签: c string

我在某些代码中遇到过这一行,无法找到在任何地方定义的语法:

*(float *)csCoord.nX = lImportHeight* .04f; /* magic number to scale font size */

如果我从 f 中删除 .04f ,则编译器会发出警告,说明由于从'double'转换为'float'而导致数据丢失。我假设 f 正在进行某种类型转换。

有没有人见过这个?这在C标准中定义了什么?

4 个答案:

答案 0 :(得分:10)

尾随f向编译器指示它是一个float类型的文字,就像“”表示文字字符串而L后缀表示一个long int。

C++ spec for literals是一样的。

答案 1 :(得分:2)

没有“f”,数量0.04是双倍。当你用一个双倍的lImportHeight时,你得到另一个双倍。然后将它存储在浮点大小的内存位置,从而失去精度。对于“f”,0.04f是浮点字面值。你有多个lImportHeight,你得到一个浮动;然后分配不会导致精度损失。

答案 2 :(得分:0)

不知道它在标准中的定义,但是使用f表示浮点数,否则编译器会认为它是双精度数。类似地,您可以通过添加u或长l(小写字母)等来指定要无符号的整数。

答案 3 :(得分:0)

究竟是什么问题?你的编译器是否会阻塞.04f?试试

(float) .04