我喜欢 C 代码中几乎所有语义元素之间的空格。
因此我更喜欢
if ( ( foo = bar ( arg1, arg2, arg3 ) ) == NULL ) {
printf ( "Error 42" );
}
到
if((foo=bar(arg1,arg2,arg3))==NULL){
printf("Error 42");
}
周围(unix平台)是否有可以做到这一点的C美化器?
它需要一个非常聪明的美化器,因为它必须不理会功能宏。
我喜欢 C 代码中几乎所有语义元素之间的空格。
因此我更喜欢
if ( ( foo = bar ( arg1, arg2, arg3 ) ) == NULL ) {
printf ( "Error 42" );
}
到
if((foo=bar(arg1,arg2,arg3))==NULL){
printf("Error 42");
}
周围(unix平台)是否有可以做到这一点的C美化器?
它需要一个非常聪明的美化器,因为它必须不理会功能宏。
indent -prs -br -i 4 file
变成这样:
#define f(x) ((x)+(x))
if((foo=bar(arg1,arg2,arg3))==NULL){
printf("Error 42");
f(42);
}
进入这个:
#define f(x) ((x)+(x))
if ( ( foo = bar ( arg1, arg2, arg3 ) ) == NULL ) {
printf ( "Error 42" );
f ( 42 );
}
该-prs
选项在括号周围放置空格,在运算符周围和逗号之后放置空格是标准的。该-br
选项强制执行您的支撑样式,并-i 4
使用 4 个空格进行缩进。请注意,宏定义没有被修改,但代码中对类似函数的宏的调用是(大概是您想要的)。
您可能想查看GNU Indent。我相信它可以满足您的所有需求。
Gnu Indent 可能可以做到这一点。不幸的是,indent 有大量的选项,其中许多根本不直观,而且其中许多以极其奇怪的方式交互。我从来没有(甚至没有一次)设法让它以一种不比进去更难看的方式来格式化代码。在某些情况下,它更统一。在其他情况下,我想它一定是统一的,但它所遵循的规则仍然很奇怪,以至于结果常常看起来很奇怪。
在与缩进斗争了一段时间后,我决定编写一个更简单的程序更容易,它只支持一种格式,如果我想更改格式,只需编辑代码即可。
我使用带有选项 cindent 和 formatoptions 的 vim,效果令人满意。你可以缩进整个文件
gg=G
gg -- go to 1st line
=G -- indent upto lastline
您可能想要编写一个 formatexpr (vim7) 或者您可能想要使用 s///g 命令编写一个自定义函数并将其映射到一个键。
除#define 行外,以下将在括号后放置一个空格
v/#define/s/[()]/\1 /g
是的,你将学习正则表达式:)