ana*_*lyg 5 c++ gcc compiler-warnings implicit-conversion
我经常使用"较长"类型变量赋值为"较短"变量,例如int
to short
或uint32_t
to 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 -Wall
或gcc -Wconversion
没有帮助(gcc没有输出任何警告).实际上,它从不输出任何输入和输出类型的警告(例如long
和unsigned char
).
我从未在gcc中发现过一个真正的错误,所以我几乎可以肯定这种行为是有道理的.
那么为什么没有警告?
更新:我使用gcc 4.1.2.
此功能已在gcc 4.3版本中添加.以前这不可用.
我希望你使用的是gcc 4.2或更低版本.
http://gcc.gnu.org/wiki/NewWconversion证实了这一点.
这个bug:http://gcc.gnu.org/bugzilla/show_bug.cgi? id = 2707也谈到了它.
我不能重现那个.用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)