TrickLibrary
  1. http://tricklib.com/
  2. cxx/
  3. ex/
  4. demicpp/

demicpp

about demicpp

このツールは限定的な機能しかないC/C++プリプロセッサコマンドラインツールで、 C/C++コンパイラ付属のC/C++プリプロセッサの代わりとして使用できるほどの機能は持ち合わせていません。

このツールでできるのは指定されたブロックの抽出および除去と、#pragma ディレクティブ行の抽出のみです。

このツールで解釈可能な条件ディレクティブの条件はこのツールで目的としている使い方に沿ったごく単純な条件に限られます。なお、解釈できなかった条件ディレクティブについてはなにも処理を行いません。このツールで解釈できない条件ディレクティブを含んだコードであっても、その条件ディレクティブが抽出および除去の対象となるブロックを識別するディレクティブでなければこのツールは問題なく動作します。

Wraith the Trickster

C/C++のコードを編集する際にマクロの指定により有効・無効が切り替えられるブロックで囲む習慣( cf. [cppll:12899] <tips> 自己解説型ディレクティブアウト )を私はとてもいいものだと思っていたのですが、最終的にコードを適用あるいはロールバックする際に機械的にそれを行うツールがなければこの習慣の価値が半減してしまうので、この demicpp を作りました。

#pragma ディレクティブ行の抽出機能については、ちと別に目的があって加えています。

2007-07-22 include サブコマンドを追加しました。あと、extract サブコマンドおよび subtract サブコマンドで最後に空行が増えてしまう問題を解消しました。

使用方法

最初に一度、お手持ちのコンパイラで 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 に出力します。
実行結果例:sample.cpp と readme.txt の WinMerge での比較結果画面
demicpp subtract -DDELETE_ME -D!CODING_NOW sample.cpp sample.new.cpp
sample.cpp から DELETE_ME で示されるブロックと CODING_NOW で否定されるブロックを除去して sample.new.cpp に出力します。
実行結果例:sample.cpp と sample.new.cpp の WinMerge での比較結果画面
demicpp pragma sample.cpp pragma.txt
sample.cpp から全ての #pragma 行を抽出し pragma.txt に出力します。
実行結果例:sample.cpp と pragma.txt の WinMerge での比較結果画面
demicpp pragma -trim sample.cpp trimed.pragma.txt
sample.cpp から全ての #pragma 行を抽出しトリムした結果を trimed.pragma.txt に出力します。
実行結果例:pragma.txt と trimed.pragma.txt の WinMerge での比較結果画面

ダウンロード