根据这里的答案建议,我开启了-Wbad-function-cast
来查看是否有不良行为gcc可以捕获,结果出现了以下示例:
unsigned long n;
// ...
int crossover = (int)pow(n, .14);
这里不是关键的地方,crossover
变量是一个 int
类型,但它也可以是 unsigned long
或其他类型,警告信息是一样的。
这似乎是一个很普通且有用的强制类型转换的例子,为什么会有问题?是否有理由保留这个警告呢?
我通常喜欢设置很多警告,但我无法理解这个警告的使用情况。我正在处理的代码涉及大量数字计算,经常需要将数据从一种类型转换为另一种类型以满足各种算法的需求。
+0.0f
来终止它。 - MSalters