マクロ c_assert() は定数式についてコンパイル時にマクロ assert() と同等の働きをするものです。 // 明示的な符号指定がない型 char は signed char と仮定した c_assert( is_signed(char) ); // 右シフトが算術シフトである処理系を仮定した c_assert( -1 == (-1 >> 1) ); // 1 バイトが 8 ビットである処理系を仮定した c_assert( 8 == CHAR_BIT ); // 型 int が 32 ビット以上であると仮定した c_assert( 32 <= (CHAR_BIT * sizeof(int)) );
マクロ c_assert() は以下のようにして定義することができます。 /* c_assert(expression) マクロの定義 */ #ifdef NDEBUG #define c_assert( expression ) #else // #ifdef NDEBUG #define c_assert( expression ) typedef char DUMMY_ARRAY_FOR_COMPILE_ASSERT[ ( expression ) ? 1 : -1 ] #endif // #ifdef NDEBUG
マクロ c_assert() は、定数式 expression が 偽 である場合、DUMMY_ARRAY_FOR_COMPILE_ASSERT を要素数 -1 の配列型名として宣言します。 関連 | |