我试图在一个C源代码上运行splint,其中包括标准C库中的complex.h,以支持复杂的算术。
不幸的是,splint由于以下错误而失败。
夹板3.1.2 -2009年5月3日 /usr/include/位/cmathcalls.h:54:31:解析错误:非函数声明:_Complex : extern。(有关解析错误的帮助,请参阅夹板-help解析错误。)*不能继续。
在谷歌搜索这个问题后,只有这条信息出现在分片讨论邮件列表上(这个列表仍未得到答复)。
有什么想法吗?
更新
下面是一个非常简单的失败源示例:
#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.发布于 2011-10-26 13:38:42
我最终解决了这个问题,在调用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
发布于 2010-06-29 20:01:17
我不是用夹板的人,所以用一点盐.
_Complex关键字是用C99添加的,而夹板FAQ有关于C99 (http://www.splint.org/faq.html#quest15)的如下内容:
然而,Splint还不支持所有的C99扩展,因此需要修改一些合法的C程序。
我猜_Complex已经被那个警告所覆盖了。
您可能可以使用FAQ (http://www.splint.org/faq.html#quest14)中描述的一种技术来解决splint显然缺乏对http://www.splint.org/faq.html#quest14的支持的问题,但如果这能帮助splint使用_Complex处理C99代码,我会感到惊讶。
如果您只想忽略一个关键字,可以添加
-Dnonstandardkeyword=使预处理程序消除关键字,其中nonstandardkeyword是关键字的名称。
https://stackoverflow.com/questions/3144057
复制相似问题