10

这段小代码可以同时使用 GCC 和 Clang 编译,但会给出不同的结果:

#include <stdio.h>

int main(){

  __int128_t test=10;
  while(test>0){
    int myTest=(int)test;
    printf("? %d\n", myTest);
    test--;
  }

}

对于 GCC,这从 10 计数到 1,即预期的行为,而对于 Clang,它会继续计数为负数。使用 Clang,如果我替换test--test-=1then 它也会给出预期的行为。

__int128_t 是 GCC 扩展,所以上述结果只适用于非标准 C,所以可能 __int128_t 在 Clang 中是“使用风险自负”。

这是 Clang 中的错误,还是我犯了一些我没有看到的错误?

编辑:我正在使用 gcc (MacPorts gcc48 4.8-20130411_0) 4.8.1 20130411 (prerelease) 和 Apple clang 4.0 (tags/Apple/clang-421.0.60) (基于 LLVM 3.1svn)。

4

1 回答 1

9

这是 Clang 中的一个错误,在 Apple clang 4.0 版 (tags/Apple/clang-421.0.60)(基于 LLVM 3.1svn)和 Apple LLVM 4.2 版(clang-425.0.28)(基于 LLVM)之间的某个地方得到了解决3.2svn),请参阅评论——感谢 Carl 和 H2CO3。

于 2013-05-08T19:39:00.270 回答