将int赋值给short(gcc)时没有警告

时间:2011-01-02 18:57:22

标签: c++ gcc compiler-warnings implicit-conversion

我经常使用“较长”类型变量分配给“较短”变量,例如intshortuint32_tuint8_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 -Wallgcc -Wconversion没有帮助(gcc没有输出任何警告)。实际上,它从不为任何输入和输出类型输出任何警告(例如longunsigned char)。

我从未在gcc中发现过一个真正的错误,所以我几乎可以肯定这种行为是有原因的。

为什么没有警告?

更新:我使用gcc 4.1.2。

2 个答案:

答案 0 :(得分:7)

此功能已在gcc 4.3版本中添加。以前这不可用。

我希望您使用的是gcc 4.2或更低版本。

http://gcc.gnu.org/wiki/NewWconversion证实了这一点。

这个错误:http://gcc.gnu.org/bugzilla/show_bug.cgi?id=2707也谈到它。

答案 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