下面的程序涉及一个隐式缩小的函数参数。信息可能会丢失。
WITH new_transactions AS (
select * from transactions
where merchant_id = 1 and inserted_at > date '2017-11-01'
), older_transactions AS (
select * from transactions
where merchant_id = 1 and inserted_at < date '2017-11-01'
)
SELECT * from new_transactions
WHERE user_id NOT IN (select user_id from older_transactions);
如果我使用void func(short) {}
int main()
{
int i = 0x7fffffff;
func(i);
}
使用gcc编译此程序(使用C或C ++),我会收到没有警告!
当然,这种行为通常被认为是不合需要的。
是否有一些gcc命令行参数会在发生这些缩小转换时触发诊断消息?