1__extension__ union { double d; int i[2]; } u = { d: -0.25 }; 2 3/* This assumes the endianness of words in a long long is the same as 4 that for doubles, which doesn't hold for a few platforms, but we 5 can probably special case them here, as appropriate. */ 6long long endianness_test = 1; 7#define MSW (*(int*)&endianness_test) 8 9int 10signbit(double x) 11{ 12 __extension__ union { double d; int i[2]; } u = { d: x }; 13 return u.i[MSW] < 0; 14} 15 16int main(void) 17{ 18 if (2*sizeof(int) != sizeof(double) || u.i[MSW] >= 0) 19 exit(0); 20 21 if (!signbit(-0.25)) 22 abort(); 23 24 exit(0); 25} 26