小编use*_*044的帖子

这对int64_t的处理是GCC和Clang的错误吗?

现在,你们中的一些人会想要大喊未定义的行为,但是有一个问题.该类型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)

c linux gcc posix clang

5
推荐指数
2
解决办法
673
查看次数

标签 统计

c ×1

clang ×1

gcc ×1

linux ×1

posix ×1