GNU 缩进:如何禁止在结构数组声明中的“,”前插入换行符?

GNU 缩进:如何禁止在结构数组声明中的“,”前插入换行符?

参见以下示例。我不希望,字符位于单独的行中。我尝试了所有indent选项,但似乎没有人支持这一点。

$ indent -version
GNU indent 2.2.9
$ cat foo.c
void
foo ()
{
  struct_a arr[] = {
    {&a, sizeof (a)},
    {&b, sizeof (b)},
    {&c, sizeof (c)},
    {&d, sizeof (d)},
  };
}
$ indent -st foo.c
void
foo ()
{
  struct_a arr[] = {
    {&a, sizeof (a)}
    ,
    {&b, sizeof (b)}
    ,
    {&c, sizeof (c)}
    ,
    {&d, sizeof (d)}
    ,
  };
}
$

答案1

参考1.7 声明

如果指定了“-bc”选项,则声明中的每个逗号后都会强制换行。例如,

int a,
  b,
  c;

使用 '-nbc' 选项后,结果如下

int a, b, c;

您需要使用该-nbc选项来获取想要的输出。

请注意,这将禁用,声明后的每个换行符。

你可能想看看1.10 禁用格式化关闭特定代码段的格式化。

例如:

void
foo ()
{
/* *INDENT-OFF* */
  struct_a arr[] = {
    {&a, sizeof (a)},
    {&b, sizeof (b)},
    {&c, sizeof (c)},
    {&d, sizeof (d)},
  };
/* *INDENT-ON* */
}

答案2

看起来真是sizeof()太令人困惑了indent。所以我有一个解决方法:首先,将所有出现的sizeofwith SIZEOF(例如 using sed)更改为 invoke indent,然后改SIZEOFsizeof

$ cat foo.c
void foo() {
    struct_a arr[] = {
        {&a, sizeof (a), 1},
        {&b, sizeof (b), 1},
        {&c, sizeof (c), 1},
        {&d, sizeof (d), 1},
    };
}
$ indent -st foo.c
void
foo ()
{
  struct_a arr[] = {
    {&a, sizeof (a), 1}
    ,
    {&b, sizeof (b), 1}
    ,
    {&c, sizeof (c), 1}
    ,
    {&d, sizeof (d), 1}
    ,
  };
}
$ sed s/sizeof/SIZEOF/g foo.c | indent -st | sed s/SIZEOF/sizeof/g
void
foo ()
{
  struct_a arr[] = {
    {&a, sizeof (a), 1},
    {&b, sizeof (b), 1},
    {&c, sizeof (c), 1},
    {&d, sizeof (d), 1},
  };
}
$

相关内容