この小さなコードは 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 ベース) を使用しています。