当我与OSX 10.8,并且不产生警告克++ 4.2.1编译的Mac 64位机器上下面的代码时不警告。降级双浮动
#include "stdio.h"
int main()
{
double d= 3.14159;
float res= d;
printf("%f\n", res);
return 0;
}
显然,自动将双精度降为浮点值可能非常危险,但编译器不会生成任何警告。我能找到的唯一解决办法是使用标志-Wshorten 64至32。
在我看来,这样一个明显的错误,我很惊讶,编译器默认情况下不抓住这个错误。有什么理由为什么g ++默认不会捕获这个错误?有没有更好的方式来产生,而无需使用-Wshorten 64至32的警告?
如果你想知道,-Wall不会产生任何警告...
感谢您对您的帮助提前。
真实似乎是“为什么GNU/g ++不应用-Wshorten-64-to-32默认或作为-Wall的一部分?”我不相信这有一个好的答案。只需在项目中启用此类功能并继续。 (在C/C++中有许多东西我会*要求*警告或彻底禁止,但是我会编写一个[衍生语言]的编译器,拒绝大量带默认设置的代码..) – user2864740 2014-09-29 03:17:22
请求降级编写** float ** res = d;如果编译器对此提出警告,我会认为它很烦人。 – 2014-09-29 03:28:41
很多这一点归结为开发社区的长期经验......如果许多有经验的程序员被这样的意外转换所困扰,首先GCC可能会将警告作为“-Wall”的一部分,然后有人会可能会建议对标准进行修改等等。事实上,它没有被警告过,这表明很少有人看到你的“潜在的非常危险”有很多实质性的东西。标准允许许多类似危险的转换,总而言之,它们证明更加方便麻烦。 – 2014-09-29 04:29:57