1

Смотрите следующий пример. Я не хочу , символ в отдельной строке. Я просматриваю все варианты 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 ответа2

0

Похоже, что 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},
  };
}
$
0

Ссылка 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* */
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .