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-=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 ベース) を使用しています。

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 に答える