Я ищу бесплатную статическую проверку кода C99 (включая расширения GCC) с возможностью явно сказать «эти макросы препроцессора всегда определены».
Мне нужна эта последняя часть, потому что я компилирую встроенный код для одного целевого процессора. Компилятор (Microchip C32, основанный на GCC) устанавливает макрос на основе выбранного процессора, который затем используется в заголовочных файлах PIC32, чтобы выбрать специфичный для процессора заголовочный файл для включения. cppcheck , поэтому терпит неудачу, потому что он обнаруживает 30 различных #ifdef
с, используемых для выбора одного из многих возможных процессоров PIC32, пытается проанализировать все возможные комбинации этих плюс все другие #define
с и завершается неудачей. 1007 *
Например, если шина может обработать код C99, я бы использовал
splint -D__PIC32_FEATURE_SET__=460 -D__32MX460F512L__ \
-D__LANGUAGE_C__ -I/path/to/my/includes source.c
Дополнительная проблема состоит в том, что компилятор цепочки инструментов PIC32 называется pic32-gcc
, а не просто gcc
, хотя я еще не дошел до необходимости учитывать это.
Обновление # 1 - Одна вещь, которая меня интересует, но ортогональна этому вопросу, это интеграция с Eclipse (было бы неплохо не писать make-файл для 30+ модулей компиляции) , Я спрашивал об этом на форумах Eclipse (хотя обсуждение там больше об интеграции в Eclipse). Ничего потрясающего.
Обновление # 2 - только что попробовал scan-build
из clang , используя:
scan-build --use-cc=/usr/local/bin/pic32-gcc make -B -k all
... (также без флага --use-cc
), но все, что я получил, было типичным результатом сборки, примером которого является:
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
... и в конце:
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.
Так что либо мой код идеален согласно scan-build
, либо он ничего не делает. Я не уверен, что хороший тест, чтобы увидеть, работает ли он.