Je recherche un vérificateur statique gratuit pour le code C99 (incluant les extensions GCC) avec la possibilité de dire explicitement "ces macros du préprocesseur sont toujours définies".Vérificateur statique gratuit pour le code C99
J'ai besoin de cette dernière partie car je compile du code embarqué pour un seul processeur cible. Le compilateur (C32 de Microchip, basé sur GCC) définit une macro basée sur le processeur sélectionné, qui est ensuite utilisé dans les fichiers d'en-tête PIC32 pour sélectionner un fichier d'en-tête spécifique au processeur à inclure. cppcheck échoue donc parce qu'il détecte les 30 différents #ifdef
s utilisés pour sélectionner l'un des nombreux processeurs PIC32 possibles, tente d'analyser toutes les combinaisons possibles de ceux-ci plus tous les autres #define
, et échoue.
Par exemple, si splint pourrait traiter le code C99, j'utiliser
splint -D__PIC32_FEATURE_SET__=460 -D__32MX460F512L__ \
-D__LANGUAGE_C__ -I/path/to/my/includes source.c
Un autre problème est que le compilateur toolchain PIC32 est appelé pic32-gcc
et non pas seulement gcc
, bien que je ne l'ai pas encore arrivé au point de devoir en tenir compte.
Mise à jour # 1 - Une chose qui m'intéresse, mais qui est orthogonale à cette question, est l'intégration Eclipse (ce serait bien de ne pas avoir à écrire un makefile pour plus de 30 unités de compilation). J'ai demandé à ce sujet sur le Eclipse forums (bien que la discussion il y a plus sur l'intégration dans Eclipse). Rien d'innovant.
Mise à jour # 2 - juste essayé scan-build
de clang, en utilisant:
scan-build --use-cc=/usr/local/bin/pic32-gcc make -B -k all
... (aussi sans le drapeau --use-cc
), mais tout ce que je suis arrivé a été la sortie de construction typique, dont un exemple est :
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
... et à la fin:
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.
Donc soit mon code est parfait selon scan-build
, soit il ne fait rien. Je ne suis pas sûr de ce que pourrait être un bon test pour voir si cela fonctionne.
vous devez ajouter votre disposition à utiliser dans Eclipse à votre question, si c'est en effet une exigence de votre solution. –
Non, ce serait un bonus supplémentaire. Je vais éditer la question pour la rendre plus claire. Je suis toujours en train de travailler sur la construction de scan-build pour utiliser la chaîne d'outils PIC32, et si je le fais, j'accepterai la réponse ci-dessous. – detly
Davis @Adam - J'allais modifier la question pour mieux mettre l'accent sur mon utilisation du toolchain PIC32, mais je ne sais pas si cela va interférer avec votre motivation pour mettre en place une prime. Faites-moi savoir si vous voulez que j'attende. – detly