夹板失败的代码包括复杂性。
-
01-10-2019 - |
题
我正在尝试运行 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
如果将这对围绕代码放置,您希望夹板忽略,它将忽略它!至少我发现的其他内容都不适用于系统标头文件。