demicpp
about demicpp
このツールは限定的な機能しかないC/C++プリプロセッサコマンドラインツールで、
C/C++コンパイラ付属のC/C++プリプロセッサの代わりとして使用できるほどの機能は持ち合わせていません。
このツールでできるのは指定されたブロックの抽出および除去と、#pragma ディレクティブ行の抽出のみです。
このツールで解釈可能な条件ディレクティブの条件はこのツールで目的としている使い方に沿ったごく単純な条件に限られます。なお、解釈できなかった条件ディレクティブについてはなにも処理を行いません。このツールで解釈できない条件ディレクティブを含んだコードであっても、その条件ディレクティブが抽出および除去の対象となるブロックを識別するディレクティブでなければこのツールは問題なく動作します。
使用方法
最初に一度、お手持ちのコンパイラで demicpp.cpp をコンパイルして demicpp コマンドを作成してください。
コマンド書式
demicpp サブコマンド [オプション] 入力ファイル 出力ファイル
サブコマンド
- extract
- オプションで指定されたマクロの条件で有効となるブロックを抽出します。
- subtract
- オプションで指定されたマクロの条件で有効となるブロックを除去します。
- include
- オプションで指定されたファイルの #include 指定を展開します。
- pragma
- 条件ディレクティブを無視して全 #pragma ディレクティブ行を抽出します。
オプション
- -Dマクロ
- extractサブコマンドおよびsubtractサブコマンドで抽出あるいは除去する対象となるブロックを特定するマクロを指定します。複数指定が可能です。
- -Dファイル名
- inlucdeサブコマンドで展開するインクルード対象のファイルを指定します。複数指定が可能です。
- -D!マクロ
- extractサブコマンドおよびsubtractサブコマンドで抽出あるいは除去する対象となるブロックを特定するマクロを指定します。ただし、-Dと異なり真偽が逆になります。複数指定が可能です。
- -trim
- pragmaサブコマンドでこのオプションが指定すると余分な余白をトリムした状態で出力します。
指定例
- demicpp extract -DREAD_ME sample.cpp readme.txt
-
sample.cpp から READM_ME で示されるブロックを抽出し readme.txt に出力します。
- demicpp subtract -DDELETE_ME -D!CODING_NOW sample.cpp sample.new.cpp
-
sample.cpp から DELETE_ME で示されるブロックと CODING_NOW で否定されるブロックを除去して sample.new.cpp に出力します。
- demicpp pragma sample.cpp pragma.txt
-
sample.cpp から全ての #pragma 行を抽出し pragma.txt に出力します。
- demicpp pragma -trim sample.cpp trimed.pragma.txt
-
sample.cpp から全ての #pragma 行を抽出しトリムした結果を trimed.pragma.txt に出力します。
ダウンロード
C/C++のコードを編集する際にマクロの指定により有効・無効が切り替えられるブロックで囲む習慣( cf. [cppll:12899] <tips> 自己解説型ディレクティブアウト )を私はとてもいいものだと思っていたのですが、最終的にコードを適用あるいはロールバックする際に機械的にそれを行うツールがなければこの習慣の価値が半減してしまうので、この demicpp を作りました。
#pragma ディレクティブ行の抽出機能については、ちと別に目的があって加えています。
2007-07-22 include サブコマンドを追加しました。あと、extract サブコマンドおよび subtract サブコマンドで最後に空行が増えてしまう問題を解消しました。