Notice : 内容無保証。禁無断転載。リンク不自由。

staticassert.h

#ifndef _static_assert_h_
#define _static_assert_h_

template <bool> struct CstaticAssert ;
template <> struct CstaticAssert<true> {} ;
#define    StaticAssert(exp)   (void)sizeof(CstaticAssert<(exp) != 0>)

#endif /* _static_assert_h_ */

main.cpp

// 02 の assert() を StaticAssert() で置き換えた例

// sizeof(char) < sizeof(int) が成立する環境なら、
// コンパイル後のコードは 02 と全く同じになる。

// sizeof(char) < sizeof(int) が成立しない環境なら、
// そのことをコンパイルエラーとして検出できるため、
// 実行時までエラーの検出が引き伸ばされる 02 に比べ
// 品質の確保が容易だといえる。

#include <stdio.h>
#include "staticAssert.h"

static const int _ONE_ = 1 ;
#define isLittleEndianCPU() (\
    StaticAssert(sizeof(char) < sizeof(int)),\
    *((char*)(&_ONE_)) != 0\
)

int main(void){
    if (isLittleEndianCPU()){
        printf("Little Endian.\n") ;
    }else{
        printf("Big Endian.\n") ;
    }

    return 0 ;
}