我正在尝试运行 splint 在C源中包括 complex.h 从标准C库来支持复杂算术。

很遗憾, splint 失败,以下错误。

夹板3.1.2 --- 03年5月3日

/USR/include/bits/cmathcalls.h:54:31:解析错误:非功能声明:_complex:extern double。 (有关解析错误的帮助,请参阅夹板-Help parseerrors。)***无法继续。

谷歌搜索这个问题仅导致 这条信息 在拆分邮件列表中(尚未解决)。

有任何想法吗?

更新

这是一个失败源的非常简单的示例:

#include <complex.h>

int main() {
  complex x = 2 + 8i;
  x = x + 1;
}

尝试重新定义未支持的 _Complex C99关键字导致复数数字的虚构部分的错误(我想这不足为奇)。

lsc@deepthought:~$ splint-D_Complex=double temp.c  
Splint 3.1.2 --- 03 May 2009

 temp.c:4:20: Parse Error. (For help on
 parse errors, see splint -help
                parseerrors.)
*** Cannot continue.
有帮助吗?

解决方案 3

我最终通过暂时覆盖解决了这个问题 complex.h 打电话时带一个假人 splint.

[lsc@home]$ ls /opt/qa_tools/utils/splint_includes/
complex.h

[lsc@home]$ splint -I/opt/qa_tools/utils/splint_includes test.c
Splint 3.1.1 --- 15 Jun 2004

Finished checking --- no warnings

假人 complex.h 文件抑制相关的关键字,并用虚拟函数代替常数/函数。这些关键字/常数/函数从 规格

此文件的副本可在此处提供: https://gist.github.com/1316366

其他提示

我不是夹板用户,所以请加一点盐...

_Complex 使用C99添加了关键字,并且夹板常见问题解答说有关C99的话(http://www.splint.org/faq.html#quest15):

但是,夹板尚未支持所有C99扩展,因此需要修改一些合法的C程序。

我猜 _Complex 被那个警告覆盖。

您可能能够解决Splint明显缺乏支持 _Complex 使用常见问题中描述的技术(http://www.splint.org/faq.html#quest14),但是如果这使您能够帮助夹板处理C99代码,我会感到惊讶 _Complex:

如果您只想忽略关键字,则可以添加 -Dnonstandardkeyword= 为了使预处理器消除关键字,其中 nonstandardkeyword 是关键字的名称。

我一直在努力获取夹板以忽略标题,并且在网上任何地方都找不到合适的答案。我终于使用了夹板的内置帮助,并发现了这一点:

#ifndef S_SPLINT_S

#endif

如果将这对围绕代码放置,您希望夹板忽略,它将忽略它!至少我发现的其他内容都不适用于系统标头文件。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top