2011-03-29 11 views
17

This question pregunta acerca de un verificador de estilo de codificación, pero el foco parece estar en la sangría y la colocación de llave. La sangría de GNU se ocupa de la sangría (lo cual no es un problema en esta base de código, sorprendentemente).comprobador de estilo de codificación para c (nombres de variables, sin sangría)

Estoy trabajando con un montón de código que está lleno de diversos esquemas de nombramiento: camelCase, everythingruntogetherinlowercase, underscores_as_separators, SomeStructsEndWithT, etc.

me gustaría ser capaz de recoger una convención y al menos tienen un control automático de que los nuevos cambios están en línea con la convención.

¿Existe una buena herramienta para verificar el nombre en C? Algo así como la herramienta pepton checker de Python, no quiero un embellecedor.

Gracias.

+0

Un par de expresiones regulares podría cubrir esto, para la mayoría de los casos. Combínelo con un lexer existente para facilitar ignorar todo menos los identificadores. – delnan

+0

El kernel de Linux tiene una secuencia de comandos estilo-checker escrita en Perl llamada checkpatch.pl. Está bajo linux/scripts. –

+0

El verdadero problema con lo que quiere hacer es que puede hacer esto en un lenguaje sensible a mayúsculas y minúsculas y tiene dos variables con las mismas letras pero con mayúsculas y minúsculas. Entonces podrías terminar rompiendo tu código. Me acercaría a esto con mucha cautela. – hvanbrug

Respuesta

3

Parece que el cpplint de Google (un comprobador de estilo de C++) puede ser pirateado en el envío para verificar C como yo quiero.

(todavía estoy interesado en saber si hay algún mejores damas por ahí.)

1

Ésta tiene una serie de respuestas ya en este hilo Coding style checker for C

de la que Vera ++ podría ser el más prometedor, ya que la mayoría de las otras sugerencias son formateadores no validadores. Hay una página web sobre ejecutar vera ++ en https://bitbucket.org/verateam/vera/wiki/Running.

Hay una descarga de https://bitbucket.org/verateam/vera/downloads/vera++-1.1.1.tar.gz Compilación presenta algunos problemas:

  • sudo apt-get install libboost-dev tcl-dev
  • un include de tcl.h que debería haber sido tcl/tcl.h
  • Necesita un árbol impulso src completo, al igual que desde http://sourceforge.net/projects/boost/files/boost/1.53.0/boost_1_53_0.tar.gz/download
  • El comando de compilación se convierte en algo así como: make BOOST_DIR=/home/fluffy/tmp/boost_1_53_0
  • vera ++ necesita un ~/.vera++/profiles/ pero no autocreate un defecto (que puede ser copiada de la de la distribución, sin embargo)

Por último, ejecutarlo en un C++ archivo de salida producida como (con errores duplicados omitidos por razones de brevedad):

../dllist.c:1: no copyright notice found 
../dllist.c:4: horizontal tab used 
../dllist.c:10: horizontal tab used 
../dllist.c:10: closing curly bracket not in the same line or column 
../dllist.c:29: horizontal tab used 
../dllist.c:38: keyword 'if' not followed by a single space 
../dllist.c:38: negation operator used in its short form 
../dllist.c:40: horizontal tab used 
../dllist.c:40: full block {} expected in the control structure 
../dllist.c:42: horizontal tab used 
../dllist.c:71: keyword 'if' not followed by a single space 
../dllist.c:71: negation operator used in its short form 
../dllist.c:72: horizontal tab used 
../dllist.c:72: full block {} expected in the control structure 
../dllist.c:73: horizontal tab used 
+1

¿Verifica Vera ++ el estilo de nombre, según la segunda oración de la pregunta? Revisé las [reglas en la wiki] (https://bitbucket.org/verateam/vera/wiki/Rules) que no mencionaban el nombre de las verificaciones de convenciones. Además, el enlace actualizado parece ser https://bitbucket.org/verateam/vera – congusbongus

+0

He agregado material sobre cómo encontrar, compilar (y hacer que la compilación funcione) y ejecutar el resultado con un resultado de ejemplo. Sin embargo, revise también el otro subproceso de stackoverflow, puede usar 'indent' (como lo sugiere @bortzmeyer) y diferir el resultado para una posible limpieza de estilo, que también podría usarse como un gancho de check-in bastante draconiano. –

+1

Gracias por la actualización, pero _¿Hace Vera ++ verificar nombres de variables_? Es decir, ¿puedo configurarlo para buscar variables/funciones que no sean camelCase o PascalCase, etc.? Su respuesta expandida no cubre esto, y no creo que la sangría de GNU verifique esto tampoco. – congusbongus

2

es una opción poco ortodoxo, pero me gustaría ir con cxref, si usted está dispuesto a poner en la mitad de un día de trabajo. Es un referenciador cruzado, viene con el código fuente, tiene un analizador limpio y no construye un árbol de análisis sintáctico. Sin embargo, con unas pocas líneas de código puede volcar todas las variables para examinarlas, o reescribirlas a su estilo preferido (o si usted es tan vago como yo en lugar de reescribir podría generar comandos de reemplazo para emacs/sed). Solo logré construirlo para Mac.

+0

+1: Creo que hay mucho que decir sobre el uso de 'cxref' (o, alternativamente, 'ctags') para hacer todo el trabajo de análisis necesario para extraer los nombres de las variables. No creo que tenga que modificar ninguno de estos programas, simplemente postprocesar el resultado utilizando 'sed',' perl', 'python' o cualquier script para verificar el cumplimiento de un estándar. – Simon

Cuestiones relacionadas