CPPLint




Muitas vezes um código que funciona bem, nem sempre quer dizer que ele é legível, ou de fácil manutenção. O que acontece é que cada programador tem uma forma própria de desenvolver, e isto até certo ponto não prejudica o desenvolvimento. Porém quando este código começa a sofrer alterações por vários programadores, a padronização na forma de desenvolvimento passa a ser muito importante.

Mas e agora, qual padrão devemos seguir? do programador A ou do programador B, ou devemos criar um novo padrão utilizando as melhores práticas de A e B? Estas alternativas estão todas corretas, é muito importante ter um padrão de programação estabelecido entre os programadores para haver sinergia. Porém criar um padrão de desenvolvimento é algo que pode ser tornar trabalhoso, mas a pior parte é garantir que todos estão seguindo o padrão.

Existem algumas ferramentas que podem auxiliar na automação da conferência deste estilo de programação. O google possui um guia de codificação, voltado principalmente para C++, que também pode ser utilizado para análise de código em C, e pode ser consultado em aqui. Para facilitar a conferência deste padrão a google desenvolveu uma ferramenta de análise estática, baseada em python chamada Cpplint. O código fonte desta aplicação pode ser encontrado e baixado no github e seu uso é bem simples.


Exemplo

Tomamos o seguinte código:
#include <stdio.h>
int main(){

  int var=15;

  printf("valor de var: %d\n",var);
  return 0;
}

O que você acha? Este código possui algum problema?
Vamos compilar o código e rodar para ver se há algo estranho. Para isso:
$ make prog && ./prog

Isto fará com que nosso código seja compilado, e no caso de compilação concluída com sucesso nosso programa será executado. E após sua execução a saída é a seguinte:
valor de var: 15

Nosso código funciona.

Agora vamos rodar o cpplint para vermos se está de acordo com o padrão google. Para isso rode o seguinte comando no terminal linux:
$ cpplint.py --extensions=c teste.c

E ele nos retorna o seguinte:

teste.c:0:  No copyright message found.  You should have a line: "Copyright [year] "  [legal/copyright] [5]
teste.c:3:  Missing space before {  [whitespace/braces] [5]
teste.c:4:  Redundant blank line at the start of a code block should be deleted.  [whitespace/blank_line] [2]
teste.c:5:  Missing spaces around =  [whitespace/operators] [4]
teste.c:7:  Missing space after ,  [whitespace/comma] [3]
Done processing teste.c
Total errors found: 5

Vamos agora analisar a saída da execução do cpplint:
  1. teste.c:0: Nesta linha ele retornou a seguinte mensagem 'No copyright message found' isso significa que o código não tem os direitos de cópia definido no arquivo;
  2. teste.c:3: 'Missing space before {', de acordo com o guia de estilo do google é necessário ter um espaço entre o ')' de uma função e a '{' ;
  3. teste.c:4: 'Redundant blank line at the start...', está informando que tem uma linha em branco desnecessária;
  4. teste.c:5: 'Missing spaces around = ', é necessário adicionar espaços ao redor do operador =;
  5. teste.c:7: 'Missing spaces after ,', isto informa que é necessário incluir um espaço após cada vírgula nos parâmetros de uma função.
Um outro detalhe do cpplint é que você pode configurar quais ser alertas a verificação poderá emitir, para isto é necessário o arquivo CPPLINT.cfg. Para remover um alerta, basta você adicionar '-' e o texto que aparece entre '[]' no log do cpplint, e todos separados por virgula. Crie o arquivo e insira o trecho abaixo para omitir o alerta de copyright.
filter=-legal/copyright

Após aplicarmos todas as correções informadas pelo cpplint, nosso código ficará da seguinte forma:

#include <stdio.h>

int main() {
  int var = 15;
  printf("valor de var: %d\n", var);
  return 0;
}

E agora ao rodarmos novamente o cpplint, temos a seguinte saída:
Done processing teste.c
Total errors found: 0


Conclusão

Quando se trata de padronização, o cpplint ajuda bastante, principalmente para aqueles programadores exigentes. Claro que não serão todos os casos que ele conseguirá pegar, mas já ajudará a padronizar seu código.


Tem alguma dúvida ou algo a acrescentar? Compartilhe conosco.


Referências

Postar um comentário

0 Comentários