通过添加 printf 更改 C 输出

问题描述 投票:0回答:1
int32_t result = registers[rs] + registers[rt];  
if (((registers[rs] > 0) && (registers[rt] > 0) && (result < 0)) || 
    ((registers[rs] < 0) && (registers[rt] < 0) && (result > 0))) {
        fprintf(stderr, "arithmetic overflow\n");
} else {
        registers[rd] = result;
}

只需简单的添加并检测溢出,如果

registers[rs]
是2147483647并且
registers[rt]
是1,
registers[rd]
将得到-2147483648的结果。但是如果我在
printf("%d\\n", result)
rs
中声明具有相同值的变量结果后添加
rt
,它将显示算术溢出

registers[rs]
为2147483647且
registers[rt]
为1时,应该输出算术溢出

c debugging printf
1个回答
1
投票
int32_t result = registers[rs] + registers[rt];  

当有符号整数溢出发生时,它会调用 UB(未定义的 Bahaviour)。

在添加这些整数之前您需要进行检查。

bool willOverflow(int32_t a, int32_t b) 
{
    bool overflow = false;

    if (a > 0 && b > 0 && (a > INT32_MAX - b))  
    {
        overflow = true;
    }
    else if (a < 0 && b < 0 && (a < INT32_MIN - b)) 
    {
        overflow = true;
    }

    return overflow;
}
© www.soinside.com 2019 - 2024. All rights reserved.