Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
压缩多行C函数原型_C_Ctags_Exuberant Ctags_Uncrustify - Fatal编程技术网

压缩多行C函数原型

压缩多行C函数原型,c,ctags,exuberant-ctags,uncrustify,C,Ctags,Exuberant Ctags,Uncrustify,我有C函数原型(某些windows api头文件),看起来像: int foo ( int a , int * b ) ; (它们似乎没有编码约定) 我正试图通过编程将其转换为表单的一行原型(或与之相近的东西): 我研究过像ctags()这样的程序以及uncrustify()中的各种设置,但在这两个方面我都没有取得任何进展。(任何洞察都会很好,或者我错过的385个未锈蚀选项中的一个符合我的要求) 在编程方面,我试图寻找表示函数原型的唯一标记,以便编写一个脚本,根据自己的喜好格式化代码 如果不使

我有C函数原型(某些windows api头文件),看起来像:

int
foo
(
int
a
,
int
*
b
)
;
(它们似乎没有编码约定)

我正试图通过编程将其转换为表单的一行原型(或与之相近的东西):

我研究过像ctags()这样的程序以及uncrustify()中的各种设置,但在这两个方面我都没有取得任何进展。(任何洞察都会很好,或者我错过的385个未锈蚀选项中的一个符合我的要求)

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

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

使用vim的解决方案


int上放置标记,并通过
indent-kr
astyle--style=kr

运行
11J
使用vi的另一个解决方案:

执行正则表达式搜索以删除所有换行符。然后获取结果混乱,并执行另一个正则表达式搜索,替换每个
带有
\n\n
。这将给您留下一个原型列表,在每个原型之间跳过一行。因为我们标记的是原型的结束,而不是开始,并且所有原型都以相同的方式结束,所以我们不必担心不识别特殊情况

sed ':a;N;$!ba;s/\n/ /g' prototypes.file  | sed 's/; */;\n/g'
第一个命令-在管道之前-将所有新行替换为空格,下一个命令将在每个分号后面放回新行

当然,只有当文件中只有这些原型时,这才有效。如果您希望保留其他内容,可以使用vim的视觉选择和两个替换命令:

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

:s/\n/ /
选择连接线并单击“确定”

:s/; */;\r/g

原始格式从何而来?@carl这些文件都是windows api头文件,虽然大多数都不像示例中那样夸张,但我正在尝试找到一个尽可能健壮的解决方案。对于返回其他类型的函数,原型如何?
indent-kr
几乎正是我要寻找的,它唯一无法解决的问题是,将指针调到同一行
astyle--style=kr
似乎被删除了,()因此我使用了
--style=k/r
。但是它只进行缩进,没有换行。更好的是,
manindent
首先查看最适合您的选项:)
indent-kr
不起作用,因为它不会移动
foo
放在同一行。我之前做过这方面的实验,不记得为什么我停止了-我会回头看看。我猜你需要从牙签倾斜综合症中恢复过来。好吧,回头看。)
:s/; */;\r/g