【发布时间】:2012-06-25 10:01:38
【问题描述】:
我正在使用 GCC v4.4.5,并且我发现了一个我没想到的默认整数提升方案。
为了激活足够的警告以防止隐式错误,我激活了选项 -Wconversion,从那时起,我注意到当我执行下面的代码时,警告 "conversion to 'short int' from 'int' 可能会改变它的值” 存在。
signed short sA, sB=1, sC=2;
sA = sB + sC;
这意味着 "sB + sC" 被提升为 int 然后分配给 sA 这是 signed short时间>。 要修复此警告,我必须像这样投射它。
signed short sA, sB=1, sC=2;
sA = ( signed short )( sB + sC );
以下代码也存在此警告。
signed short sA=2;
sA += 5;
并且可以通过移除操作符+=来修复...
sA = ( signed short )( sA + 1 );
这有点烦人,因为我不能使用运算符 +=、-=。
我希望 GCC 根据操作数选择正确的整数提升。我的意思是,sA=sB+sC 和 sA+=5 不应提升为 int,因为它们都是 signed short em>。
我知道默认情况下提升为 int 可以防止溢出错误,但这有点烦人,因为我必须强制转换大部分代码或将变量更改为 int。
我可以使用 GCC 选项来展示这个整数提升方案吗?
感谢您的帮助。
【问题讨论】:
-
我没有解决方案,但您始终可以写成
short而不是完整的signed short,这样可能会稍微不那么烦人。我承认它仍然很烦人。
标签: gcc integer-promotion