我有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个非常糟糕的选项之一就是我想做的事。)
以编程方式,我正在尝试寻找表示函数原型的唯一标记,以便我可以编写一个脚本来根据自己的喜好格式化代码。
不使用词法分析器和解析器,这似乎很快就会变得非常复杂;有什么建议吗?
答案 0 :(得分:4)
通过indent -kr
或astyle --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
。这应该留给你一个原型列表,每个原型之间跳过一行。由于我们标记原型的末端而不是开头,并且所有原型以相同的方式结束,因此我们不必担心不能识别特殊情况。