【发布时间】:2015-11-22 20:50:14
【问题描述】:
众所周知,在 C 语言中,浮点字面量(例如 1.23)的类型为 double。因此,任何涉及它们的计算都会被提升为双倍。
我正在开发一个嵌入式实时系统,该系统具有一个仅支持单精度 (float) 数字的浮点单元。我所有的变量都是float,这个精度就足够了。我根本不需要(也买不起)double。但每次都像
if (x < 2.5) ...
写了,灾难发生了:减速可能高达两个数量级。当然,直接的答案就是写
if (x < 2.5f) ...
但这很容易被忽略(并且很难检测到,直到为时已晚),尤其是当“配置”值是 #define'd 由不那么训练的(或只是新的)开发人员在单独的文件中时。
那么,有没有办法强制编译器将所有(浮点)文字视为浮点数,就好像带有后缀f 一样?即使它违反规格,我也不在乎。还是有其他解决方案?顺便说一句,编译器是 gcc。
【问题讨论】:
-
有
-Wdouble-promotion,它至少会给你警告。结合-Wfloat-conversion应该可以提供很好的覆盖率。 -
这并不能直接回答你的问题,但是编写一个脚本来插入任何缺失的
fs 从 FP 文字中并不难。 -
一些用于嵌入式系统的编译器将双精度映射为浮点,并且仅通过选项启用双精度。不知道GCC里有没有类似的东西
-
@BrettHale 该评论值得作为正确答案。我认为在这种情况下获得警告会比其他一些允许程序员编写与标准不兼容的代码的编译器选项更有效率。
标签: c gcc floating-point literals