2011-11-20 125 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

嗯。看起来像很多文字说“不是我所知道的。”。 :) –