(1) : キャスト時にポインタ値を自動補正するタイプのコンパイラ(具体例不明)では誤動作するらしいバージョン。
static int One_ = 1 ; int isLittleEndian(void) {return (int)(*(char*)&One_) ;} int isBigEndian(void) {return !(int)(*(char*)&One_) ;}
(2) : 判定失敗がわかる(かもしれない)バージョン。isUnknownEndian() が 真になる環境はあるのでしょうか?
static const union { int i ; char c[sizeof(int)] ; } One = { 1 } ; int isLittleEndian(void) {return One.c[sizeof(int)-1]==0 ;} int isBigEndian(void) {return One.c[0]==0 ;} int isUnknownEndian(void) {return isLittleEndian()==isBigEndian();}