8

指定した単一の関数マクロを展開して変換したい C++ ソース ファイルが多数あり、他のすべての前処理ディレクティブはそのままにしておきます。マクロへの引数は、一般に、括弧と中括弧、および括弧で保護されたコンマを含むため、sed と kin でこれを行うのは簡単ではないようです。

更新: 私たちのコードはボイラー プレートを生成するためにマクロを多用しています (例: swig のヘルパー コード)。特定のことを行う方法をよりよく理解するにつれて、さまざまなマクロがひどく興味深いことをしなくなり (たとえば、いくつかの関数を宣言するだけ)、多くの人がコードが読みにくくなると不満を漏らしています。単純な C++ コードに展開されるあまり興味のないマクロを展開したいと思います。

4

3 に答える 3

2

私はPythonで正規表現を使用してこの種のことを行いました。かなり短いスクリプトを記述して、多数のファイルを処理し、それぞれに対していくつかの正規表現を実行できます。正規表現はおそらく最も時間のかかる部分です。

于 2013-01-08T18:42:24.080 に答える
0
  • undef.hファイルを作成する
  • #undef展開したくないすべてのマクロに 's を入力します
  • extern int LandMarkSoYouCanFindThis;最後の行として含める
  • ファイルごとに
    • #include "undef.h"ファイルの最後のインクルードの後に​​挿入します。
    • ファイルを実行するcpp
    • を使用しLandMarkて、インクルードからすべてを切り離します
    • 元のファイルにマージします。

#undef選択したマクロのみを実行#undefする場合とすべてのマクロを実行する場合の違いからパッチを生成することで、最後の手順を自動化できる場合があります。

于 2013-08-09T15:12:13.407 に答える