我有一些C代码,其中包括适当的旧版应用程序的标头。我无法修改标题。我收到以下代码的夹板分析错误:

#if defined(HAS_LONGLONG)
    /* removed for brevity */
#elif defined(HAS_INT64)
    /* removed for brevity */
#else
  typedef union {
    int32   l[2]; /* This is the line that is causing the parse error in splint */
    double  d;
  } int64;
#endif


我可以将任何参数传递给夹板以使其正常工作吗?

该平台是64位,而旧版应用程序是32位。

我正在像运行夹板:

[me@host]$ splint -I/path/to/include -preprox -warnposix

Splint 3.1.1 --- 28 Apr 2003
/path/to/include/some_header.h:7:10:
    Parse Error. (For help on parse errors, see splint -help parseerrors.)
*** Cannot continue.


没有-preprox和-warnposix,我在旧版标头中会遇到很多其他错误。

最佳答案

您应该通过-Dint32=int

splint FAQ指出:


  
  我使用带有非标准关键字和数据类型的编译器在嵌入式系统上开发代码。我想在代码上运行Splint,但是这些非标准关键字会导致解析错误。我该怎么办?
  
  您通常可以使用-D解决此问题。
  
  如果只想忽略关键字,则可以添加-Dnonstandardkeyword=以使预处理器消除该关键字,其中nonstandardkeyword是关键字的名称。同样,您可以使用-Dspecialtype=int将自定义类型解析为int。

关于c - 如何解决“int32 l [2]”的夹板分析错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59218972/

10-13 06:17