这段小代码可以同时使用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
,那么它也会给出预期的行为。
__int128_t是GCC的扩展,因此上述结果仅适用于非标准C,在Clang中使用__int128_t可能存在风险。
这是Clang的错误还是我犯了一些看不见的错误?
编辑:我正在使用gcc(MacPorts gcc48 4.8-20130411_0)4.8.1 20130411(预发布版)和Apple clang版本4.0(tags / Apple / clang-421.0.60)(基于LLVM 3.1svn)。