是否有一个gcc标志来捕获整数截断?

时间:2014-03-05 12:50:16

标签: c gcc floating-accuracy

当我尝试将gcc值放入double变量时,是否有int标志来表示警告/错误?我目前设置了-Wall -Wextra -Werror但是当我(例如)将double传递给int参数时,我仍然没有收到警告,即使我丢失了信息。

2 个答案:

答案 0 :(得分:8)

您可以使用-Wconversion选项。来自GCC的手册(强调我的)

  

警告可能会改变值的隐式转换。 这包括   实数和整数之间的转换,如x是double时的abs(x);   有符号和无符号之间的转换,如无符号ui = -1;和   转换为较小的类型,如sqrtf(M_PI)。不要警告   显式转换,如abs((int)x)和ui =(unsigned)-1,或者如果是   转换中的值不会像abs(2.0)那样改变。警告   关于有符号和无符号整数之间的转换可以被禁用   通过使用-Wno-sign-conversion。

这是状态提升GCC 4.8.2,而从GCC 4.9.0开始,您也可以使用-Wfloat-conversion

答案 1 :(得分:3)

是的,请使用-Wfloat-conversion选项:

  

-Wfloat-conversion

     

警告隐式转换会降低实际值的精度。这包括从实数到整数的转换,以及从更高精度实数到更低精度实数值的转换。 -Wconversion也启用了此选项。