下面的程序涉及到一个隐式缩小的函数参数,可能会丢失信息。
如果我使用gcc编译这个程序(无论是C还是C++),并使用
当然,这种行为通常被认为是不可取的。
是否有一些gcc命令行参数可以在发生这些缩小转换时触发诊断消息?
void func(short) {}
int main()
{
int i = 0x7fffffff;
func(i);
}
如果我使用gcc编译这个程序(无论是C还是C++),并使用
-Wall -Wextra
,我将不会收到任何警告!当然,这种行为通常被认为是不可取的。
是否有一些gcc命令行参数可以在发生这些缩小转换时触发诊断消息?
-Wconversion
将允许编译器输出有关此类问题的警告消息。 - user36292490xffffffff
解释为-1,并且以某种方式意识到该值适合于short类型。这只是一个小概率事件。 - Mark Ransomgcc
而不是C++
(这是一种不同的语言),所以请删除c++
标签。 - user3629249void func(short);
这将是可以接受的,但对于其实现来说则不然,因为代码不能在没有标识符的情况下使用参数。这不是一个警告,而是一个错误。 - Weather Vane