3

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

int
foo
(
int
a
,
int
*
b
)
;

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

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

int foo(int a, int * b);

我已经研究过 ctags (ctags 多行 C 函数原型)之类的程序以及 uncrustify(http://uncrustify.sourceforge.net/)中的各种设置,但是我都无法取得任何进展。(任何洞察力都会很棒,或者我错过的 385 个不可靠的选项之一可以满足我的需求)。

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

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

4

4 回答 4

4

运行它们indent -krastyle --style=kr

于 2011-07-25T21:45:04.863 回答
1

使用vim的解决方案?

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

于 2011-07-25T21:44:17.377 回答
1
sed ':a;N;$!ba;s/\n/ /g' prototypes.file  | sed 's/; */;\n/g'

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

当然,这只有在文件中除了这些原型之外什么都没有的情况下才有效。如果还有一些其他的东西你想保持原样,你可以使用 vim 的视觉选择和两个替换命令:

选择您要加入的地区,然后

:s/\n/ /

选择连接线并

:s/; */;\r/g
于 2011-07-25T22:49:42.127 回答
0

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

进行正则表达式搜索,删除所有换行符。然后把结果弄得一团糟,做另一个正则表达式搜索;,用; \n\n. 这应该会给你留下一个原型列表,每个原型之间都跳过一行。由于我们标记原型的结束而不是开始并且所有原型都以相同的方式结束,因此我们不必担心无法识别特殊情况。

于 2011-07-25T21:56:27.683 回答