Recuo do GNU: Como proibir a inserção de novas linhas antes de ',' na declaração de matrizes de estruturas?

1

Veja o exemplo a seguir. Não quero o caractere , em uma linha separada. Eu passo por todas as opções de indent , mas parece que ninguém é para isso.

$ 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)}
    ,
  };
}
$
    
por pynexj 23.12.2014 / 07:27

2 respostas

0

Parece que é sizeof() que confundiu indent . Portanto, eu tenho uma solução alternativa: primeiro, altere todas as ocorrências de sizeof com SIZEOF (por exemplo, usando sed ), invoque indent e altere SIZEOF de volta para 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},
  };
}
$
    
por 27.03.2015 / 14:58
0

Referência 1.7 Declarações :

If the ‘-bc’ option is specified, a newline is forced after each comma in a declaration. For example,

int a,
  b,
  c;

With the ‘-nbc’ option this would look like

int a, b, c;

Você precisa usar a opção -nbc para obter a saída desejada.

Observe que isso desativará as novas linhas após cada , em uma declaração.

Você pode querer olhar 1.10 Desativando a formatação para desativar a formatação para uma seção particular de código.

Por exemplo:

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