我正在为HiTech C编译器编写很多代码。我确信我的代码会受益于像splint这样的静态检查器,但是夹板本身会在HiTech的一些扩展中跳闸,如cp0
和sfr
声明。不过,我不能告诉夹板跳过HiTech标题,因为它不知道我的大多数标识符来自哪里。HiTech/Microchip C的免费静态检查器?
有谁知道可以应付这个静态检查?
添加:扩展示例: 大多数情况下,它只是新的类型限定符和绝对寻址,例如。
extern volatile cp0 unsigned int cp0_Config @ __REGADDR(16,0);
extern volatile sfr unsigned long OC2R @ 0xBF;
(另外还有persistent
类型限定符。)
还有用于功能interrupt
和fast
预选赛:
void interrupt ExceptionHandler(void) @GENERAL_EXCEPTION
{
...
}
补充:
我终于得到了周围尝试下面的Doug Currie的方法。我用SED的shell脚本去掉任何尾随的“... @ ...;”绝对定位的声明,跑分裂与
splint -D__32MX460F512L__ -Dsfr= -Dcp0= -Dmips32r2= -I ~/HiTechStripped mymodule.c
根据模块的不同,夹板抱怨:
< Location unknown >: Field name reused:
Code cannot be parsed. For help on parse errors, see splint -help
parseerrors. (Use -syntax to inhibit warning)
< Location unknown >: Previous use of
< Location unknown >: Previous use of
< Location unknown >: Previous use of
[this goes on for about 100 lines...]
其他的模块,我得到:
../../../../HiTechStripped/stdlib.h:140:39: mismatched parentheses in #if
Preprocessing error. (Use -preproc to inhibit warning)
这是错了这一点,因为据我所知:
#if defined(_XA_) && sizeof(double) == 8
我想也许我应该放弃静态检查。感谢您的答案。
您可以举一个例子说明这些扩展是如何在预处理之前或之后进行的? – 2010-01-29 08:42:32