如何在mingw下使用linux下的splint

时间:2013-11-18 15:03:55

标签: c linux mingw mingw-w64 splint

我用splint和mingw安装了debian linux实际稳定版。 我想用splint检查我的c代码(我需要用mingw编译,抱歉)。简单地添加mingw-includes是不够的。我尝试定义 GNU 和i686 - 但我确信还需要更多。我还需要进一步定义或包含哪些内容?

我尝试了贷款的想法,导致__builtin_va_list出现问题。

Splint 3.1.2 --- 20 Feb 2009
/usr/i686-w64-mingw32/include/vadefs.h:24:43: Parse Error:
    Suspect missing struct or union keyword: __builtin_va_list :
    int. (For help on parse errors, see splint -help parseerrors.)
*** Cannot continue.

有趣的是,我找不到任何定义 - 即使在include文件夹上使用递归grep。我找错了吗? 通过-D__builtin_va_list=va_list(来自 benjarobin )的方式定义它,我遇到了错误

Splint 3.1.2 --- 20 Feb 2009

/home/ebelingb/.splintrc:229:1: Setting -stats redundant with current value
/home/ebelingb/.splintrc:229:1: Setting -showsummary redundant with current
                                   value

/usr/i686-w64-mingw32/include/winnt.h:2390:15:
    Parse Error. (For help on parse errors, see splint -help parseerrors.)
*** Cannot continue.

即使用+ trytorecover也无法恢复。

winnt.h(和邻居)的行读取

2388    typedef struct _EXCEPTION_POINTERS {
2389      PEXCEPTION_RECORD ExceptionRecord;
2390      PCONTEXT ContextRecord;
2391    } EXCEPTION_POINTERS,*PEXCEPTION_POINTERS;
奇怪,不是吗?

好的,因为这个帖子没有得到进一步的答案,我会通过这个 最小的不工作的例子 给出一些动力:
给定文件test.c

#include <windows.h>
#include <stdio.h>
#include <time.h>
#define LOGFILEFORMAT "C:\\CBM\\log\\%Y%m%d.log"
#define LOGTIMESTAMPFORMAT "%Y-%m-%d %H:%M:%S"
int main() /*int argc,char **argv*/{
Sleep(1234);
    return (0);
}

和我的.splintrc

-I/usr/lib/gcc/i686-w64-mingw32/4.6/include
-I/usr/lib/gcc/i686-w64-mingw32/4.6/include-fixed
-I/usr/i686-w64-mingw32/include

easy命令splint test.c失败:

Splint 3.1.2 --- 20 Feb 2009

/usr/i686-w64-mingw32/include/_mingw.h:480:29: Parse Error:
    Suspect missing struct or union keyword: __int64 :
    long int. (For help on parse errors, see splint -help parseerrors.)
*** Cannot continue.

我再也不知道,如何设置。以上包含来自编译器i686-w64-mingw32-gcc的预处理调用,该调用在test.c上正常运行。

1 个答案:

答案 0 :(得分:1)

您可以使用空白C源文件获得一个很好的预处理器定义列表,并使用您想要的自定义参数通过GCC / MinGW运行它:

gcc -E -P -v -dD [optional arguments] blank.c

请务必为目标使用正确的编译器。您可以将输出重定向到文件,并将您可能需要的任何定义从那里传递给夹板。