首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在包含comp.h的代码上夹板失败

在包含comp.h的代码上夹板失败
EN

Stack Overflow用户
提问于 2010-06-29 19:32:38
回答 2查看 1.7K关注 0票数 1

我试图在一个C源代码上运行splint,其中包括标准C库中的complex.h,以支持复杂的算术。

不幸的是,splint由于以下错误而失败。

夹板3.1.2 -2009年5月3日 /usr/include/位/cmathcalls.h:54:31:解析错误:非函数声明:_Complex : extern。(有关解析错误的帮助,请参阅夹板-help解析错误。)*不能继续。

在谷歌搜索这个问题后,只有这条信息出现在分片讨论邮件列表上(这个列表仍未得到答复)。

有什么想法吗?

更新

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

代码语言:javascript
复制
#include <complex.h>

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

试图重新定义不受支持的_Complex C99关键字会导致复数虚部出现错误(我认为这并不奇怪)。

代码语言:javascript
复制
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.
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-26 13:38:42

我最终解决了这个问题,在调用complex.h时,我用一个虚拟的临时重写了splint

代码语言:javascript
复制
[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

票数 0
EN

Stack Overflow用户

发布于 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是关键字的名称。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3144057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档