Ten mały kod kompiluje zarówno GCC i Clang, ale daje różne wyniki:Błąd z __int128_t w Clang?
#include <stdio.h>
int main(){
__int128_t test=10;
while(test>0){
int myTest=(int)test;
printf("? %d\n", myTest);
test--;
}
}
z GCC ten liczy się od 10 do 1, zamierzonego zachowania, podczas gdy dla Clang to ciągle licząc na liczbach ujemnych. Z Clang, jeśli zastąpię test--
z test-=1
, to również daje oczekiwane zachowanie.
__int128_t jest rozszerzeniem GCC, więc powyższe wyniki odnoszą się tylko do niestandardowego C, więc może __int128_t jest "używaj na własne ryzyko" w Clang.
Czy to błąd w Clangu, czy też popełniłem jakiś błąd, którego nie widzę?
EDIT: Używam gcc (MacPorts gcc48 4.8-20130411_0) 4.8.1 20.130.411 (prerelease) i Apple dzyń wersja 4.0 (tags/Apple/dzyń-421.0.60) (oparty na LLVM 3.1svn) .
Dobrze, to właśnie wytłumaczyłeś na OS X 10.7.5 z GCC 4.2 i Clang 4.0. –
Działa dobrze tutaj na moim komputerze, "Apple LLVM wersja 4.2 (clang-425.0.28) (na podstawie LLVM 3.2svn)". –
@Carl Może Apple naprawił to między clang-421.0.60 a clang-425.0.28. Powinienem zaktualizować, aby sprawdzić. –