首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >免费的C99代码静态检查器

免费的C99代码静态检查器
EN

Stack Overflow用户
提问于 2010-04-27 11:51:21
回答 6查看 2.5K关注 0票数 17

我正在寻找一个免费的C99代码静态检查器(包括GCC扩展),能够显式地说“这些预处理器宏总是被定义的”。

我需要最后一部分,因为我正在为单个目标处理器编译嵌入式代码。编译器(Microchip的C32,基于GCC )根据选定的处理器设置宏,然后在PIC32头文件中使用该宏来选择要包括的处理器特定的头文件。因此,cppcheck失败,因为它检测到用于从许多可能的PIC32处理器中选择一个的30个不同的#define,尝试分析这些处理器和所有其他#define的所有可能的组合,并且失败。

例如,如果splint可以处理C99代码,我将使用

代码语言:javascript
复制
splint -D__PIC32_FEATURE_SET__=460 -D__32MX460F512L__ \
-D__LANGUAGE_C__ -I/path/to/my/includes source.c

另一个问题是,PIC32工具链编译器被称为pic32-gcc,而不仅仅是gcc,尽管我还没有达到需要说明这一点的地步。

Eclipse #1 -我感兴趣的一件事,但与这个问题是正交的,那就是集成(如果不必为30+编译单元编写makefile就好了)。我在Eclipse forums上问到了这一点(尽管这里的讨论更多的是关于集成到Eclipse中)。没有什么突破性的东西。

更新#2 -刚刚尝试了来自clangscan-build,使用:

代码语言:javascript
复制
scan-build --use-cc=/usr/local/bin/pic32-gcc make -B -k all

...(也没有--use-cc标志),但我得到的是典型的构建输出,示例如下:

代码语言:javascript
复制
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

末尾的...and:

代码语言:javascript
复制
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是完美的,要么它什么也做不了。我不确定什么是一个好的测试,看看它是否工作。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-04-27 11:54:29

Clang's static analyzer应该可以工作。

源代码#defines的另一个选择是,您可以使用一些预处理器语句对源代码运行cpp,然后通过静态分析器运行结果代码。

票数 5
EN

Stack Overflow用户

发布于 2010-04-27 11:54:45

您只需在头文件的顶部添加一些这样的代码,以保证其已定义:

代码语言:javascript
复制
#ifndef MACRO_I_NEED
#error "MACRO_I_NEED should be defined"
#define MACRO_I_NEED  // to appease cppcheck
#endif
票数 3
EN

Stack Overflow用户

发布于 2010-06-27 11:17:02

与其使用带有clang的scan-build,不如考虑完全替换掉gcc!Clang的C语言支持是稳定的(并尽最大努力模仿gcc),应该可以很好地处理你的代码。

尝试像make -j3 CC=clang这样的东西,看看会发生什么!

PS。这种语法可能是完全错误的。好久没用过makefile了(顺便说一句,CMake很棒)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2718590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档