質問: define _VA_LIST_のようにマクロ名のあと処理が書かれていない やつは一体何?
回答: ソースコードの中で #define AAA とすると、そこを読み込んだプリプロセッサは 以降#undefされるか、コード終端に達するまでコード中の AAAというシンボルを実質削除したものをコンパイラに渡します。 例えば #define AAA AAA int AAA main(AAA void){ ____return AAA 0; } これがエラー無く処理されます。 (プリプロセッサへの指令なのでコンパイラが処理する 前のソースコードに対して操作が行われます。) (このような無意味な使い方は普通しないと思います) 一般的な(文字列置換)マクロと代わりがありません。 条件コンパイルのシンボル(識別子)として使うのは 恐らく慣習です。 本来的な目的である文字列置換としては使われているとは 思えない形式的マクロを使うのが慣習になっているわけです。 個人的経験に照らし合わせても、条件コンパイルのシンボ ルが形式的なマクロでなく、本文でも使用される実体性の ある文字列置換とかマクロ関数となっているのをみると多分 少し違和感というか読みにくさを感じると思います。