2011-11-20 127 views
14

有沒有什麼工具可以根據.h自動重新排序.c文件?基於c頭文件的c文件重新排序功能

例如,foo.h

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

而且foo.c

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

我可以重新排序爲

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

順便說一句,我在Ubuntu使用議會。

+1

有趣。 ViM可以做很多事情(我看到一個「解決迷宮」的例子)。你最終可能會爲它寫一個大腳本。雖然有些東西告訴我你應該可以用宏來做到這一點。 – Shahbaz

+1

例如,複製函數的宏很容易。你從函數的開始處開始,開始視覺化(搜索'{')按'n',然後''''然後'd'。現在你有功能切斷。現在你所需要的就是找到合適的位置並插入它......我想知道...... – Shahbaz

+0

看起來像一個很好的C編程項目,可供您進行。 –

回答

2

我不認爲有這樣的工具。在C中,聲明和定義的順序通常不重要。當然,依賴循環的例外(a()調用b(),它調用a()),但是當函數在頭文件中聲明時,即使這不是問題,因爲所有聲明實際上都是處理需要處理的「前向」聲明依賴性循環。

因此,翻譯單元中的定義順序基本上是品味和風格的問題。因此,這不是編輯器設計人員易於解決的一個特徵,因爲創建功能一般而強大到足以勝任大多數用戶的功能可能會被視爲過大。想想(非可編程)編輯器通常需要多長時間才能擁有靈活而強大的自動縮進和重新格式化功能。

當自動重組時,還有可能破壞代碼的邏輯,語法或可讀性。例如,如果註釋位於函數定義之間,那麼該工具將如何知道註釋是針對特定函數還是針對一組函數,還是針對上述函數?正如@Yuri上面提到的那樣,#if /#else /#endif塊內部的函數呢?微妙的情況如宏擴展到函數或#include指令夾在函數定義之間?我認爲重新排序功能可以將其域名限制爲一個簡單的案例,但是如果案例太簡單,其訴求相應受到限制,並且不會公開或廣泛發佈。所有的說法,我認爲在你可以使用的豐富的工具集中,這樣的功能不會太難實現,但是如果我這樣做了,我預計在第一個意想不到的困難時,我會發現我自己想知道手動編輯源文件是不是更容易。畢竟,多行剪切和粘貼相當簡單。

+3

嗯。看起來像很多文字說「不是我所知道的。」。 :) –