寻求一个将在线元素之间插入空格的C美化器

时间:2009-10-23 21:53:41

标签: c code-formatting

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

因此我更喜欢

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

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

周围是否有一个C美化器(unix平台)可以做到这一点? 它需要一个认真的智能美化'因为它必须留下功能 单独的宏。

4 个答案:

答案 0 :(得分: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个空格进行缩进。请注意,宏定义未被修改,但代码中对函数式宏的调用(可能是您想要的)。

答案 1 :(得分:2)

您可能需要查看GNU Indent。我相信它可以做你想要的一切。

答案 2 :(得分:1)

Gnu Indent可能会这样做。不幸的是,缩进有很多选项,其中许多都不直观,而且其中许多选项以极其奇怪的方式进行交互。我从来没有(甚至没有一次)设法让它以一种比进入更难以出现的方式来格式化代码。在某些情况下,它更加统一。在其他人看来,我认为它必须是统一的,但它所遵循的规则仍然很奇怪,结果往往看起来很奇怪。

经过一段时间的缩进后,我决定编写一个只支持一种格式的简单程序更容易,如果我想改变格式,只需编辑代码。

答案 3 :(得分:0)

我曾经使用带有选项cindent和formatoptions的vim来达到令人满意的效果。 你可以通过

缩进整个文件
  gg=G
  gg  -- go to 1st line 
  =G  -- indent upto lastline

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

除了#define行

之外,以下内容将在parantheses之后放置一个空格

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

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