Pc-lint不理解包含的头文件中的类型

时间:2017-07-28 13:42:07

标签: c static-analysis lint

我试图在使用第三方编译器(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 )

有关如何解决此问题的任何提示将非常感激,例如。先检查什么,先改变什么等等

谢谢。

0 个答案:

没有答案