Tôi đang tìm trình kiểm tra tĩnh miễn phí cho mã C99 (bao gồm cả phần mở rộng GCC) với khả năng nói rõ ràng "các macro tiền xử lý này luôn được xác định".Trình kiểm tra tĩnh miễn phí cho mã C99
Tôi cần phần cuối cùng vì tôi đang biên dịch mã nhúng cho một bộ xử lý đích. Trình biên dịch (dựa trên bộ vi xử lý C32, GCC của Microchip) đặt macro dựa trên bộ xử lý được chọn, sau đó được sử dụng trong các tệp tiêu đề PIC32 để chọn tệp tiêu đề cụ thể cho bộ xử lý để bao gồm. cppcheck do đó không thành công vì nó phát hiện 30 khác nhau #ifdef
s được sử dụng để chọn một trong nhiều bộ vi xử lý PIC32 có thể, cố gắng phân tích tất cả các kết hợp có thể của những cộng với tất cả các #define
s khác, và không thành công.
Ví dụ, nếu splint có thể xử lý mã C99, tôi sẽ sử dụng
splint -D__PIC32_FEATURE_SET__=460 -D__32MX460F512L__ \
-D__LANGUAGE_C__ -I/path/to/my/includes source.c
Một vấn đề nữa là trình biên dịch PIC32 toolchain được gọi pic32-gcc
và không chỉ gcc
, mặc dù tôi vẫn chưa nhận được đến cần phải tính đến điều này.
Cập nhật # 1 - Một điều tôi quan tâm, nhưng là trực giao với câu hỏi này, là tích hợp Eclipse (thật tuyệt nếu không phải viết một makefile cho 30 đơn vị biên dịch). Tôi hỏi về điều này trên Eclipse forums (mặc dù các cuộc thảo luận có nhiều hơn về hội nhập vào Eclipse). Không có gì đột phá.
Update # 2 - chỉ cần cố gắng scan-build
từ clang, sử dụng:
scan-build --use-cc=/usr/local/bin/pic32-gcc make -B -k all
... (còn nếu không có sự --use-cc
cờ) nhưng tất cả tôi nhận được các điển hình xây dựng đầu ra, một ví dụ trong số đó là :
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
... và ở cuối:
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.
Vì vậy, hoặc mã của tôi là hoàn hảo theo scan-build
hoặc không hoạt động. Tôi không chắc một thử nghiệm tốt có thể là gì nếu nó hoạt động.
Bạn nên thêm quy định của mình để được sử dụng trong Eclipse cho câu hỏi của bạn nếu đó thực sự là một yêu cầu cho giải pháp của bạn. –
Không, nó sẽ là một tiền thưởng thêm. Tôi sẽ chỉnh sửa câu hỏi để làm rõ hơn. Tôi vẫn còn wokring về việc 'quét-build' để làm việc với các toolchain PIC32, và nếu tôi làm, tôi sẽ chấp nhận câu trả lời dưới đây. – detly
@Adam Davis - Tôi sẽ tinh chỉnh câu hỏi để nhấn mạnh hơn việc sử dụng chuỗi công cụ PIC32 của tôi, nhưng tôi không biết liệu điều này có ảnh hưởng đến động lực của bạn để đưa ra tiền thưởng hay không. Hãy cho tôi biết nếu bạn muốn tôi chờ đợi. – detly