Отступ 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* */
}