gpt4 book ai didi

GCC,奇怪的整数提升方案

转载 作者:行者123 更新时间:2023-12-05 04:18:42 25 4
gpt4 key购买 nike

我正在使用 GCC v4.4.5,我注意到了一个我没有预料到的默认整数提升方案。

为了激活足够的警告以防止隐式错误,我激活了选项 -Wconversion,从那时起我注意到当我执行下面的代码时,警告 “conversion to 'short int' from 'int' may alter它的值(value)” 存在。

signed short sA, sB=1, sC=2;
sA = sB + sC;

这意味着 "sB + sC" 被提升为 int,然后分配给 sAsigned 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+sCsA+=5 不应提升为 int,因为它们都是signed short.

我知道默认情况下提升为 int 可以防止溢出错误,但这有点烦人,因为我必须转换我的大部分代码或将我的变量更改为 int

我可以使用 GCC 选项来展示这个整数提升方案吗?

感谢您的帮助。

最佳答案

这不是 gcc,这是标准的 C 语义。

根据 6.3.1.1:2,具有整数类型的对象或表达式,其整数转换等级较低小于或等于 int 和 unsigned int 的秩被转换为 intunsigned int 取决于类型的符号,在参与算术表达式之前.

C 以这种方式运行的原因是允许平台上对子 int 类型的 ALU 操作效率低于对完整 int 类型的操作。您应该对 int 值执行所有算术运算,然后转换回 short 仅用于存储。

关于GCC,奇怪的整数提升方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11187150/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com