#include <stdio.h> static const int _ONE_ = 1 ; // BUGS: sizeof(char) < sizeof(int) を仮定している。 #define isLittleEndianCPU() (*((char*)(&_ONE_)) != 0) // このサンプルでは、isLittleEndianCPU() の実装が正しいのか? とか、 // sizeof(int) <= sizeof(char) となるような環境が本当にあるのか? // ってのはまあ置いといて、 // 前提条件が検証されないまま使われているのに注目すること。 // 最終的には仮定の検証をコンパイラに任せ、 // 実行時コスト0 で行う方法を示すことを目標とする。 int main(void){ if (isLittleEndianCPU()){ printf("Little Endian.\n") ; }else{ printf("Big Endian.\n") ; } return 0 ; }