这段小代码可以同时使用 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-=1
then 它也会给出预期的行为。
__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)。