众所周知,在C语言中,浮点字面值(例如1.23
)的类型为double
。因此,任何涉及它们的计算都会被提升为双精度。
我正在开发一个嵌入式实时系统,其浮点单元仅支持单精度(float
)数字。我的所有变量都是float
,这种精度已经足够。我根本不需要(也无法承受)double
。但每次类似以下代码的操作:
if (x < 2.5) ...
写代码时,如果出现灾难性的情况:程序运行速度会减慢两个数量级。当然,直接的解决方案就是编写
if (x < 2.5f) ...
但这很容易被忽视(直到晚期才难以检测),特别是当一个“配置”值在一个不够有纪律性的(或者刚入门的)开发人员所编辑的单独文件中被 #define 时。
那么,有没有一种方法可以强制编译器将所有(浮点数)字面量都视为 float 类型,就好像加了后缀 f 一样?即使违反规范,我也不在乎。或者其他解决方法?顺便提一下,编译器是 gcc。
f
并不难。 - Xophmeister