压缩多线C函数原型

时间:2011-07-25 21:39:25

标签: c ctags exuberant-ctags uncrustify

我有C函数原型(某些windows api头文件),如下所示:

int
foo
(
int
a
,
int
*
b
)
;

(他们似乎没有编码约定)

我试图以编程方式变成表单的一行原型(或接近它的东西):

int foo(int a, int * b);

我已经研究过类似ctags(ctags multi-line C function prototypes)的程序以及unrusrustify(http://uncrustify.sourceforge.net/)中的各种设置但是我无法取得任何进展。 (任何见解都会很棒,或者我错过了385个非常糟糕的选项之一就是我想做的事。)

以编程方式,我正在尝试寻找表示函数原型的唯一标记,以便我可以编写一个脚本来根据自己的喜好格式化代码。

不使用词法分析器和解析器,这似乎很快就会变得非常复杂;有什么建议吗?

4 个答案:

答案 0 :(得分:4)

通过indent -krastyle --style=kr

运行它们

答案 1 :(得分:1)

使用vim的解决方案?

将标记放在 int 上并执行11J

答案 2 :(得分:1)

sed ':a;N;$!ba;s/\n/ /g' prototypes.file  | sed 's/; */;\n/g'

第一个命令 - 在管道之前 - 将所有新行替换为空格,下一个命令将在每个分号后面添加一个新行。

当然,只有在文件中没有其他内容的情况下,这才有效。如果你想保留其他东西,你可以使用vim的视觉选择和两个替换命令:

选择要加入的区域,而不是

:s/\n/ /

选择连接线和

:s/; */;\r/g

答案 3 :(得分:0)

使用vi的另一种解决方案:

执行正则表达式搜索删除所有换行符。然后采取结果混乱并进行另一个正则表达式搜索,用;替换每个; \n\n。这应该留给你一个原型列表,每个原型之间跳过一行。由于我们标记原型的末端而不是开头,并且所有原型以相同的方式结束,因此我们不必担心不能识别特殊情况。