Отступ 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)}
    ,
  };
}
$

2 ответа

Решение

Похоже, это sizeof() что смутило indent, Итак, у меня есть обходной путь: во-первых, измените все вхождения sizeof с SIZEOF (например, используя sed), а затем вызвать indent, а затем изменить SIZEOF вернуться к sizeof,

$ 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},
  };
}
$

Ссылка 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* */
}
Другие вопросы по тегам