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

ana*_*lyg 5 c++ gcc compiler-warnings implicit-conversion

我经常使用"较长"类型变量赋值为"较短"变量,例如intto shortuint32_tto 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
Run Code Online (Sandbox Code Playgroud)

使用gcc -Wallgcc -Wconversion没有帮助(gcc没有输出任何警告).实际上,它从不输出任何输入和输出类型的警告(例如longunsigned char).

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

那么为什么没有警告?

更新:我使用gcc 4.1.2.

Vik*_*exe 7

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

我希望你使用的是gcc 4.2或更低版本.

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

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


Mar*_*wis 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
Run Code Online (Sandbox Code Playgroud)