我经常使用“较长”类型变量分配给“较短”变量,例如int
到short
或uint32_t
到uint8_t
。有一天,我决定使用gcc在我的代码中找到所有这些案例,但令我惊讶的是gcc没有输出任何警告!
int long_value;
short short_value;
std::cin >> long_value; // Example input: 32769
short_value = long_value; // MS Visual Studio complains here at warning level 4
std::cout << "Long: " << long_value << '\n'; // My example output: 32769
std::cout << "Short: " << short_value << '\n'; // My example output: -32767
使用gcc -Wall
或gcc -Wconversion
没有帮助(gcc没有输出任何警告)。实际上,它从不为任何输入和输出类型输出任何警告(例如long
和unsigned char
)。
我从未在gcc中发现过一个真正的错误,所以我几乎可以肯定这种行为是有原因的。
为什么没有警告?
更新:我使用gcc 4.1.2。
答案 0 :(得分:7)
答案 1 :(得分:5)
我无法重现。用gcc 4.4.5和-Wconversion编译这段代码,我得到
a.cc: In function ‘void f()’:
a.cc:7: warning: conversion to ‘short int’ from ‘int’ may alter its value