2009-07-22 3 views
5

C/C++識別子で先頭と2つのアンダースコアを使用しないことを頻繁にお勧めした後、すべてのソースを一度に修正することにしました。私が今必要なのは_IdentifierIdentifier_に変換することです。プロジェクト内のすべてのC/C++識別子名を更新するには

正規表現のこのタスクには、この仕事のために特別なツールを使用する必要がありますか?後者の場合、C/C++識別子に一致するパターンは何ですか?

答えて

13

先頭のアンダースコアを持つ名前が予約されていることがよくありますが、その名前に起因する問題が発生していない限り、これを行わないことを強くお勧めします。このグローバルな変更を行うことで、バージョンコントロールシステムの有用性が低くなります。これは、あらゆる種類の偽の差分を引き起こす可能性があります。また、重複する名前を作成する可能性もあります。

また、完全に有効なアンダースコアのプレフィックス付き名前が多数あります。 __LINE____FILE__などと、具体的な実装で が提供する可能性のある非標準関数のすべての名前をすぐに考えます。これらの名前をフィルタリングすることは、はるかに簡単ではありません(私は不可能に近いと言います)。確かに単純なPerlやsedスクリプトでは十分ではありません。

代わりに、コードに他の変更を加えたときにファイルごとにファイル名を変更することをお勧めします。先頭のアンダースコア名を避け、標準に従って新しいコードを書くようにプログラミング標準を変更してください。

+0

私はこれに本当に同意します。下線はそれほど重要ではありません。 –

+4

問題追跡がある場合は、名前付けに関する(優先度の低い)フォールトを発生させます。ファイルを更新するときには、名前を修正する修正と修正を加える修正の2つのチェックインを行います。 "1行の変更を加え、名前を修正するために200行を修正した"のようなチェックインは、本当に役に立たないdiffを持っています。 –

+0

私も同意します。壊れていないものを修正しようとしないでください。コードが時々ひどく見えるかもしれないことは分かっています。私のプロジェクトはそのようなものでいっぱいです。しかし、あなたはそれに慣れます。 – TalkingCode

0

回帰テストが堅かった場合は、すべてを置き換えてテストスイートを実行するためのクイックPerlスクリプトを作成するだけで問題はありません。あなたが固体回帰テストをしていない場合...うまくいけば、perlスクリプトの置き換えを行い、コードを再構築することができます。コンパイルがうまくいけば、すべてがうまくいく可能性はかなり高いです。言い換えれば、クイックソリューションを試してください。それが機能しない場合は、専用ツールを使用してください。

7

Visual Studioを使用している場合は、Visual Assist Xなどのリファクタリングプラグインがあります。

7

Perlは仕事をしなければなりませんが、厄介なときにはCoccinelleがあります。

1

Netbeansは、Refactor-> Renameメニューコマンドを使用して、プロジェクト全体でこれを実行できます。しかし、それは一度に1つの識別子にしか機能しませんので、変更する必要があるすべての識別子を繰り返し記述する必要があります。

関連する問題