gpt4 book ai didi

c++ - 这个检测整数加法溢出的函数真的有用吗?

转载 作者:可可西里 更新时间:2023-11-01 18:36:43 25 4
gpt4 key购买 nike

在阅读 this question 的评论时,我发现了一个指向 comp.lang.c FAQ 的链接这显示了一个据称检测整数溢出的“仔细加法函数”:

int
chkadd(int a, int b)
{
if (INT_MAX - b < a) {
fputs("int overflow\n", stderr);
return INT_MAX;
}
return a + b;
}

如果 b == -1,这如何不溢出?如果假设 ab 都是正数,为什么要让它们成为 int 而不是 unsigned int第一名?

最佳答案

OP 已确定 INT_MAX - b 可能会溢出,从而使剩余代码无法进行适当的溢出检测。它不起作用。

if (INT_MAX - b < a) {  // Invalid overflow detection

无UB检测溢出的方法如下:

int is_undefined_add1(int a, int b) {
return (a < 0) ? (b < INT_MIN - a) : (b > INT_MAX - a);
}

why make them int rather than unsigned int in the first place?

更改为 unsigned 并不能解决一般的问题。 unsigned: [0...UINT_MAX] 的范围可以是 int: [INT_MIN...INT_MAX] 的一半。 IOW:INT_MAX == UINT_MAX。现在这样的系统很少见。 IAC,不需要更改类型,因为使用 is_undefined_add1() 编码。

关于c++ - 这个检测整数加法溢出的函数真的有用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36919163/

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