「これらのプリプロセッサマクロは常に定義されている」と明示的に言うことができる、C99コード(GCC拡張機能を含む)用の無料の静的チェッカーを探しています。
単一のターゲットプロセッサ用の埋め込みコードをコンパイルしているので、最後の部分が必要です。コンパイラ(MicrochipのC32、GCCベース)は、選択されたプロセッサに基づいてマクロを設定します。このマクロは、PIC32ヘッダーファイルで使用され、インクルードするプロセッサ固有のヘッダーファイルを選択します。したがって、 cppcheckは、多くの可能なPIC32プロセッサの1つを選択するために使用される30#ifdef
の異なるを検出し、これらと他のすべての可能なすべての組み合わせを分析しようとして失敗する#define
ため、失敗します。
たとえば、スプリントがC99コードを処理できる場合、私は次のように使用します。
splint -D__PIC32_FEATURE_SET__=460 -D__32MX460F512L__ \
-D__LANGUAGE_C__ -I/path/to/my/includes source.c
追加の問題は、PIC32ツールチェーンコンパイラが呼び出されるpic32-gcc
だけgcc
でなく、これを説明する必要がある点にまだ到達していないことです。
アップデート#1-私が興味を持っていることの1つですが、この質問に直交しているのは、Eclipseの統合です(30以上のコンパイルユニット用のmakefileを作成する必要がないのは素晴らしいことです)。私はEclipseフォーラムでこれについて質問しました(ただし、Eclipseへの統合についてはもっと議論があります)。画期的なことは何もありません。
アップデート#2 - clangscan-build
から試してみました。
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
何もしていません。それが機能しているかどうかを確認するための良いテストが何であるかはわかりません。