【发布时间】:2012-11-24 23:44:13
【问题描述】:
根据问题here,从双精度/浮点数到无符号整数的直接转换是不可移植的。我发现我的代码中有一些发生这种情况的情况,如果发生这种情况,我想告诉 g++ 警告我,但我找不到这样的选项。有谁知道是否可以选择这样做?
注意:我确实看到了 -Wconversion,但这也会警告我不关心的各种其他转换(例如将 int 转换为 unsigned int,根据标准可移植)。
编辑:这是我希望看到警告的代码示例:
double dblNumber = -234;
unsigned long uintNumber = dblNumber;
在一个版本的 g++ 上,这给了我一个整数值 0xFFFFFF16(在 2 的补码中是 -234)。另一方面,它给了我 0。显然代码是模棱两可的,这就是为什么它不被认为是可移植的。
【问题讨论】:
-
@djechlin: "注意:我确实看到了 -Wconversion,但这也警告了我不关心的各种其他转换(例如将 int 转换为 unsigned int,即根据标准可移植)。”.
-
我承认我没有看到其他问题,但它并没有真正解决不使用 -Wconversion 的问题。很奇怪,默认情况下我没有对此发出警告,特别是因为不同版本的 g++ 反应不同,导致某些实现静默失败。
-
@KdawgUD 你能展示一段示例代码吗?不确定您是如何进行转换的。每当您从一种类型显式转换为另一种类型时,例如
un_signed_int_value=(unsigned int) double_value;,您就是在告诉编译器我知道我在做什么。所以我不明白为什么编译器会警告这种转换。事实上,如果有警告,显式强制转换会抑制任何警告。除非我误解了你的问题,否则你的问题是不可能的。 -
@Griwes 这就是为什么我要求 OP 发布一些代码来看看它是如何完成的。由于 OP 已经声明
-Wconversion没有检测到这一点,我想不出关于转换是如何完成的其他任何事情。 -
@KingsIndian,哦,对不起,时间戳读取失败。