Estoy buscando un comprobador estático gratuito para el código C99 (incluidas las extensiones GCC) con la capacidad de decir explícitamente "estas macros de preprocesador siempre están definidas".Comprobador estático gratuito para el código C99
Necesito esa última parte porque estoy compilando código incrustado para un único procesador de destino. El compilador (Microchip's C32, basado en GCC) establece una macro basada en el procesador seleccionado, que luego se utiliza en los archivos de encabezado PIC32 para seleccionar un archivo de encabezado específico del procesador para incluir. cppcheck, por lo tanto, falla porque detecta los 30 diferentes #ifdef
s utilizados para seleccionar uno de los muchos procesadores PIC32 posibles, intenta analizar todas las combinaciones posibles de estos más todos los demás #define
s, y falla.
Por ejemplo, si splint podría procesar código C99, me gustaría utilizar
splint -D__PIC32_FEATURE_SET__=460 -D__32MX460F512L__ \
-D__LANGUAGE_C__ -I/path/to/my/includes source.c
Un problema adicional es que el compilador PIC32 cadena de herramientas se llama pic32-gcc
y no sólo gcc
, aunque todavía no he llegado a la punto de necesidad de dar cuenta de esto.
Actualización # 1 - Una cosa que me interesa, pero es ortogonal a esta pregunta, es la integración de Eclipse (que sería bueno no tener que escribir un makefile durante más de 30 unidades de compilación). Pregunté sobre esto en el Eclipse forums (aunque la discusión allí es más acerca de la integración en Eclipse). Nada innovador.
Actualización # 2 - acaba de intentar scan-build
de clang, usando:
scan-build --use-cc=/usr/local/bin/pic32-gcc make -B -k all
... (también sin la bandera --use-cc
), pero todo lo que conseguí fue el resultado de generación típica, un ejemplo de los cuales es :
Building file: ../src/MoreMath.c
Invoking: PIC C32 C Compiler
pic32-gcc -D__DEBUG -I/usr/local/pic32-libs/include -O0 -Wall -c -fmessage-length=0 -std=gnu99 -Werror-implicit-function-declaration -MMD -MP -MF"src/MoreMath.d" -MT"src/MoreMath.d" -mprocessor=32MX460F512L -D__DEBUG -g -o"src/MoreMath.o" "../src/MoreMath.c"
Finished building: ../src/MoreMath.c
... y al final:
Building target: MyBinary.elf
Invoking: PIC C32 C Linker
pic32-gcc -Wl,-Map,MyBinary.map -mprocessor=32MX460F512L --defsym=__MPLAB_DEBUG=1 -o"MyBinary.elf" <<ALL OF MY *.o FILES HERE>>
Finished building target: MyBinary.elf
scan-build: Removing directory '/tmp/scan-build-2010-06-21-1' because it contains no reports.
Por lo tanto, mi código es perfecto según scan-build
, o no está haciendo nada. No estoy seguro de qué tan buena prueba podría ser para ver si funciona.
Debe agregar su estipulación para ser utilizada en Eclipse a su pregunta si ese es realmente un requisito para su solución. –
No, sería una ventaja añadida. Editaré la pregunta para que quede más claro. Todavía estoy tratando de hacer que 'scan-build' trabaje con la cadena de herramientas PIC32, y si lo hago, aceptaré la respuesta a continuación. – detly
@ Adam Davis - Iba a modificar la pregunta para enfatizar mejor mi uso de la cadena de herramientas PIC32, pero no sé si esto interferirá con tu motivación para poner una recompensa. Avísame si quieres que espere. – detly