C++では, #define で定数を定義するな, const TYPE によるグローバル変数(もしくは適当な名前空間に内包されたグローバル変数)を使え, #define でマクロ関数を定義するな,代わりに inline 関数を使え,みたいなことが言われる.これは確かにその通りだ. 1項 #define ではなく, const と inline を使おう Scott Meyers (スコット・メイヤーズ): Effective C++ (吉川訳, アスキー出版局, 1998) に書いてあるように, プリプロセッサよりコンパイラに仕事させるべき だ.でもマクロにしかできないことも多々あるわけで. case 1: 配列のサイズを取得 #define SIZE_OF_ARRAY(array) (sizeof(array)/sizeof((array)[0])) SIZE_OF_ARRAY(配列)