以下是代码:
#include <stdio.h>
int main()
{
int i = 3;
int *p = &i;
p - (p - 1);
return 0;
}
编译器(gcc)警告外部减法存在整数溢出:
[user@comp c]$ gcc foo.c
foo.c: In function ‘main’:
foo.c:6:5: warning: integer overflow in expression [-Woverflow]
p - (p - 1);
^
在我的机器上得到了正确的结果1。
为什么呢?
这是因为指针地址是无符号整数,而ptrdiff_t是带符号整数,不能处理那些大的数字。
我看到了这个信息。
p - (p);
并且
p - (p + 1);
不要引起溢出。
我正在努力理解这里的背景。这是我在stackoverflow上的第一个问题,请让我知道如果我的问题可以改进。
(p - 1)
,因为p-1
越界了。 - R Sahugcc foo.c
就是我所指的命令行。这个特定的信息只会出现在较新版本的 gcc 中,并且信息的措辞是不正确的(它不是整数溢出)。我已经更新了我的答案以反映这一点。 - Keith Thompson