有没有一个 gcc
标志可以在我尝试将double
值放入int
变量时发出警告/错误信号?我目前设置了-Wall -Wextra -Werror
,但当我(例如)将double
传递给int
参数时,仍然不会收到任何警告,即使我正在丢失信息。
有没有一个 gcc
标志可以在我尝试将double
值放入int
变量时发出警告/错误信号?我目前设置了-Wall -Wextra -Werror
,但当我(例如)将double
传递给int
参数时,仍然不会收到任何警告,即使我正在丢失信息。
-Wconversion
选项。来自GCC手册的提示:警告可能会更改值的隐式转换,包括实数和整数之间的转换,例如当x是double时的abs(x),有符号和无符号之间的转换,例如unsigned 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
进行相同的操作。
使用-Wfloat-conversion
选项:
-Wfloat-conversion
警告隐式转换会降低实值的精度。这包括从实数到整数的转换,以及从高精度实数到低精度实数的转换。此选项也由
-Wconversion
启用。
float
和double
都是“实数”)。 - unwind-Wfloat-conversion
传递给gcc
时,出现了“未识别的选项”,它可能已被替换为-Wconversion
。 - Sean Kelleher
-Wfloat-conversion
吗?这正是@unwind的回答所建议的。 - legends2k