出力テキストにすべてのマクロをそのまま残して、 C++ヘッダーファイルを前処理したいと思います。
そのためには、これらのタスクを実行するCプリプロセッサのようなプログラムが必要です。
#define
ディレクティブからのマクロをメモリに保存します。- 再帰的に
#include
ディレクティブに従います。 #if
と#ifdef
ディレクティブの条件を評価します。- ....ブロックの非アクティブな部分のコードを抑制します
#if
。#else
#endif
- (オプションで)コメントを削除
/* .. */
します。//
- 残りのすべてのディレクティブ行を削除します。
ただし、出力でマクロを置き換えてはなりません。あるいは、プリプロセッサは、置き換えられないマクロ名のリストを引数に取ることができます。
これは奇妙に聞こえるかもしれませんが、それには十分な理由があります。前処理されたC++クラスヘッダーを分析できる一連のPerlスクリプトがあります。また、いくつかのマクロを使用して、たとえばエクスポートするメソッドを指定します。
必要なことを実行できるプリプロセッサプログラムが見つからなかったので、Perlスクリプトを作成しました。後者は実際には機能しますが、低速で標準的ではありません。私はより良い代替案を探しています。