我试图在使用第三方编译器(TASKING TriCore v4.1r2)的大型C项目上使用PC-lint。 Lint报告了大量错误,但大多数错误似乎只是lint无法正常工作,这可能是由于我的配置。所以我想知道是否有人可以看到任何会导致(或知道如何防止)错误的事情:
我有一个带有类似这样的typedef的头文件:
#ifndef FOO_TYPES_H
#define FOO_TYPES_H
typedef unsigned char U8;
typedef unsigned long U32;
#endif
在lint输出中,我可以看到正在处理文件,它似乎没有错误地传递。 正在处理的下一个文件包括上述文件:
#include "foo_types.h"
在第二个文件中,我有一个像这样定义的结构:
typedef struct
{
U8 v1;
U32 v2;
} FOO_STRUCT;
但是lint给了我这样的错误:
Warning Line 71: No explicit type for symbol 'FOO_STRUCT::U32', int assumed. Lint code: 601
Error Line 71: Expecting ';'. Lint code: 10
这表明它没有识别出包含的文件" foo_types.h",显然这会导致更多的问题。 imlinting的.c文件看起来像这样:
#include <stdlib.h>
#include "foo.h"
#include "foo_types.h"
void bar(U8 v1, U32 v2)
{
FOO_STRUCT s;
s.v1 = v1;
s.v2 = v2;
}
我已经在std.lnt中指定了所有包含文件夹,但它们肯定正在处理中。当我使用-p选项运行lint时,我可以看到它在开始处理.c模块之前会检查整个包含列表。
此外,文件名是唯一的,因此不会引起问题。
编辑: file:stdlib.h
typedef unsigned int size_t;
//some more definitions that it doesnt complain about here ..
//next line causes lint to complain
extern void * calloc(size_t,size_t)__malloc__;
这是lint所说的:
Note Line 70: Function 'calloc' defined without a prototype in scope. Lint code: 957
Error line 70: Expecting ';'. Lint code: 10
此文件中没有提及calloc或 malloc ,它不包含任何其他内容。 有没有办法让lint看到这不是一个错误?
EDIT2: 这些是我正在使用的选项,这可能是问题的真正所在:
//Most of this stuff i got from a colleague
-DKB_SCHEDULER=1;BIT_BASHED_DALLAS=1;IBC_DEV_CID_CTRL=1;SW_CLOCK_TICK_PERIOD_MS=8;RTC_HW_FITTED=1;__CTC__=1;OSC_FREQ_MHZ=20;TX_DELAY_ACTIVE;CTRL_CPU=1;CPU_FREQ_MHZ=300;ZEROED_CRC=1;TC1798_CPU;BCU_BUILD=1;NEW_COM_CAN_LINK=1;__MODEL__=1;__nop=_nop_;__align()=;
// Handle some of the non standard compiler keywords for the Tasking
//compiler on the Tri-core.
-d__attribute__()=
+rw(_bit) -dsbit=_bit -e537 -e534
-pragma(message) // do not issue pragma messages
-esym(950, sdata,bdata,idata,huge,xhuge,far,near)
// Don't stop make because of warnings
-zero(99)
//suppress ANSI/ISO limit of 6 'significant characters in an external
//identifier', 'trace_buffer', exceeded -- processing is unaffected Info
-e793
-esym(960, 17.4) // MISRA Rule 17.4 - Pointer arithmetic other than array
//indexing used does not seem to work on PC Lint.
-emacro(960,TRUE)
-emacro(961,TRUE)
-emacro(506,TRUE)
-emacro(960,FALSE)
-emacro(961,FALSE)
-emacro(506,FALSE)
-emacro(960,ASSERT_RELEASE)
-emacro(961,ASSERT_RELEASE)
-esym(718,__mfcr)
-esym(746,__mfcr)
-esym(960,__mfcr)
-esym(718,__mtcr)
-esym(746,__mtcr)
-esym(960,__mtcr)
-d__interrupt(x)=
-d__trap(x)=
-dinline=
-d__noinline=
-mD -si2 -spN2 -spF4 +libclass( angle )
有关如何解决此问题的任何提示将非常感激,例如。先检查什么,先改变什么等等
谢谢。