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