现在,你们中的一些人会想要大喊未定义的行为,但是有一个问题.该类型int64_t不是由C标准定义,而是由POSIX定义.POSIX将此类型定义为:
带符号的整数类型,宽度为N,无填充位和二进制补码表示.
它不会留下这个实现来定义,并且绝对不允许将它视为无界整数.
linux$ cat x.c
#include <stdio.h>
#include <stdlib.h>
#include <inttypes.h>
int stupid (int64_t a) {
return (a+1) > a;
}
int main(void)
{
int v;
printf("%d\n", v = stupid(INT64_MAX));
exit(v);
}
linux$ gcc -ox x.c -Wall && ./x
0
linux$ gcc -ox x.c -Wall -O2 && ./x # THIS IS THE ERROR.
1
linux$ gcc --version
gcc (Debian 4.9.2-10) 4.9.2
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see …Run Code Online (Sandbox Code Playgroud)