【发布时间】:2011-01-02 18:57:22
【问题描述】:
我经常使用将“较长”类型变量分配给“较短”变量,例如将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。
【问题讨论】:
-
@icecrime:gcc 当然需要编译它。在 short 比 int 短的平台上,它应该并且确实会发出警告。
标签: c++ gcc compiler-warnings implicit-conversion