1

我喜欢 C 代码中几乎所有语义元素之间的空格。

因此我更喜欢

if ( ( foo = bar ( arg1, arg2, arg3 ) ) ==  NULL ) {
    printf ( "Error 42" );
}

if((foo=bar(arg1,arg2,arg3))==NULL){
    printf("Error 42");
}

周围(unix平台)是否有可以做到这一点的C美化器?
它需要一个非常聪明的美化器,因为它必须不理会功能宏。

4

4 回答 4

4
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 个空格进行缩进。请注意,宏定义没有被修改,但代码中对类似函数的宏的调用是(大概是您想要的)。

于 2009-10-24T03:46:05.300 回答
2

您可能想查看GNU Indent。我相信它可以满足您的所有需求。

于 2009-10-23T22:01:27.390 回答
1

Gnu Indent 可能可以做到这一点。不幸的是,indent 有大量的选项,其中许多根本不直观,而且其中许多以极其奇怪的方式交互。我从来没有(甚至没有一次)设法让它以一种不比进去更难看的方式来格式化代码。在某些情况下,它更统一。在其他情况下,我想它一定是统一的,但它所遵循的规则仍然很奇怪,以至于结果常常看起来很奇怪。

在与缩进斗争了一段时间后,我决定编写一个更简单的程序更容易,它只支持一种格式,如果我想更改格式,只需编辑代码即可。

于 2009-10-23T22:07:41.967 回答
0

我使用带有选项 cindent 和 formatoptions 的 vim,效果令人满意。你可以缩进整个文件

  gg=G
  gg  -- go to 1st line 
  =G  -- indent upto lastline

您可能想要编写一个 formatexpr (vim7) 或者您可能想要使用 s///g 命令编写一个自定义函数并将其映射到一个键。

除#define 行外,以下将在括号后放置一个空格

v/#define/s/[()]/\1 /g

是的,你将学习正则表达式:)

于 2011-09-08T22:08:57.257 回答