2011-11-20 10 views
14

.hに基づいて.cファイルを自動的に並べ替えるツールはありますか?cヘッダファイルに基づくcファイルの並べ替え機能

例えば、foo.h

void function1(); 
void function2(); 
void function3(); 

そしてfoo.c

void function2(){} 
void function1(){} 
void function3(){} 

私はUbuntuの中でVimを使用しています、ちなみに

void function1(){} 
void function2(){} 
void function3(){} 

としてそれを並べ替えることができます。

+1

興味深い。 ViMはたくさんのことをすることができます(私は1つの "迷いを解決"の例を見ました)。あなたはそれのために大きなスクリプトを書くことになるかもしれません。何かがマクロでこれを行うことができるはずですが、私に教えてください。 – Shahbaz

+1

たとえば、関数をコピーするマクロは簡単です。あなたは関数の始めから視覚的に始めます( '{')を検索して 'n'、次に'% '、次に' d'を押します。これで機能がカットされました。あなたが今必要とするのは、その適切な場所を見つけてそれを挿入することです。...私は不思議です... – Shahbaz

+0

あなたが引き受けるための良いCプログラミングプロジェクトのようです。 –

答えて

2

私はそのようなツールがあるとは思わない。 Cでは、宣言と定義の順序は一般的に重要ではありません。もちろん、依存ループ(a()a()を呼び出します)を除きますが、関数がヘッダファイルで宣言されても、すべての宣言が効果的に処理に必要な宣言であるため、これは問題ではありません依存関係ループ。

したがって、翻訳単位の定義の順序は基本的に味とスタイルの問題です。このように、編集者のデザイナーが対応するのは難しいことではありません。なぜなら、ユーザーの大半に価値のある一般的で強力な機能を作成しようとする努力は、はるかに大きいと思われるからです。 (プログラマブルではない)エディタが、柔軟で強力な自動インデントと再フォーマット機能を一般に持つのにどれくらいの時間がかかるか考えてください。

また、ロジック、文法、またはコードの読みやすさが自動的に再構成されると、コードが破損する危険性があります。たとえば、コメントが関数定義の間にある場合、コメントが特定の関数、関数のグループ、または上記の関数に関係するかどうかをツールはどのように知るでしょうか? @Yuriが上記に言及しているように、#if /#else /#endifブロック内の関数はどうでしょうか?関数に展開するマクロや関数定義に挟まれたディレクティブを#includeするような微妙なケースはどうですか?並べ替え機能でドメインを単純なケースに限定することができますが、ケースが単純すぎると、その魅力はそれに応じて制限され、公開されたり広く公開されることはありません。

あなたが自由に使える豊富なツールセットを使って、このような機能を実装するのは難しくありませんが、私がそれをやっていたら、最初の予期しない難しさで、手作業でソースファイルを編集するほうが簡単ではないかと疑問に思っています。結局のところ、マルチラインのカットアンドペーストはかなり簡単です。

+3

Hmmm。 「私が知っているわけではない」と言う文章のようです。 :) –

関連する問題