> とは一体どういう意味なのでしょうか? ・コンパイル時にエラーという形でAssertionを起こすためのマクロ ・実装定義である負の値を右シフトした場合の挙動を調べるマクロ x 2 です。 > なぜ、ブロックの中にchar型が宣言されているのでしょうか? char型の宣言ではなく,char型を要素とする配列型の宣言であることが重要です。 exprが真の場合, STATIC_ASSERTは { char _STATIC_ASSERTION[1]; (void)_STATIC_ASSERTION; } となり,コンパイルを通ります。 しかし,exprが負の場合, STATIC_ASSERTは { char _STATIC_ASSERTION[-1]; // 要素数が負であることは許されないのでエラー (void)_STATIC_ASSERTION; } となり,コンパイルを通りません。 通常