Quando tento formatar meu código C usando GNU Indent , ele não parece lidar com vários níveis de recuo aninhado. Especificamente, parece colapsar o segundo nível de recuo.
Por exemplo, se este é o código com o qual começo:
#include <stdio.h>
int main(int argc, char *argv[])
{
int n;
if (argc > 1) {
printf("# of args: %d\n", argc);
}
for (n = 1; n <= 15; n++) {
if (n % 3 == 0) {
printf("fizz %d\n", n);
} else if (n % 5 == 0) {
printf("buzz %d\n", n);
} else if (n % 3 == 0 && n % 5 == 0) {
printf("fizzbuzz %d\n", n);
} else {
printf("%d\n", n);
}
}
return 0;
}
Se eu executar indent -kr fizzbuzz.c
, recebo isso:
#include <stdio.h>
int main(int argc, char *argv[])
{
int n;
if (argc > 1) {
printf("# of args: %d\n", argc);
}
for (n = 1; n <= 15; n++) {
if (n % 3 == 0) {
printf("fizz %d\n", n);
} else if (n % 5 == 0) {
printf("buzz %d\n", n);
} else if (n % 3 == 0 && n % 5 == 0) {
printf("fizzbuzz %d\n", n);
} else {
printf("%d\n", n);
}
}
return 0;
}
E se eu executá-lo apenas com os padrões ( indent fizzbuzz.c
), recebo isso:
#include <stdio.h>
int
main (int argc, char *argv[])
{
int n;
if (argc > 1)
{
printf ("# of args: %d\n", argc);
}
for (n = 1; n <= 15; n++)
{
if (n % 3 == 0)
{
printf ("fizz %d\n", n);
}
else if (n % 5 == 0)
{
printf ("buzz %d\n", n);
}
else if (n % 3 == 0 && n % 5 == 0)
{
printf ("fizzbuzz %d\n", n);
}
else
{
printf ("%d\n", n);
}
}
return 0;
}
Parece que se ele faz isso fora da caixa, muitas pessoas estariam perguntando sobre isso, porque se não for um bug, parece uma maneira muito estranha de formatar seu código. Por que ele faz isso?
Estou usando a versão 2.2.11 do GNU Indent.
Ele usa espaços mistos e tabulações (8 espaços) para recuar. Você pode ver isso com este exemplo mínimo:
Se eu executar isso
indent -kr
e, em seguidahexdump -C
, recebo isso:Você pode ver que o
while
é precedido por um único09
byte (tab horizontal), enquantoputs
é precedido por uma tabulação e quatro espaços (20
). O padrão é semelhante:embora aqui, apenas as chaves mais internas e
puts
obtenha uma guia.Você pode usar a opção
-nut
/--no-tabs
para usar espaços em todos os lugares:Como alternativa, você pode configurar seu editor e/ou terminal para usar guias de 8 larguras em vez de 4, se for importante manter o recuo original. O
expand
comando pode ajudar a converter arquivos existentes que você não deseja recuar.