質問

走ろうとしています splint を含むCソースで complex.h 標準のCライブラリから、複雑な算術をサポートします。

不運にも、 splint 次のエラーで失敗します。

スプリント3.1.2 --- 2009年5月3日

/usr/include/bits/cmathcalls.h:54:31:解析エラー:非機能宣言:_complex:extern double。 (解析エラーのヘルプについては、Sprint -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に追加され、Sprint FAQにはC99について言うことがあります(http://www.splint.org/faq.html#quest15):

ただし、SprintはまだすべてのC99拡張機能をサポートしていないため、変更する必要がある正当なCプログラムがいくつかあります。

私はそれを推測します _Complex その警告で覆われています。

あなたはスプリントの明らかなサポートの欠如を回避できるかもしれません _Complex FAQで説明されている手法を使用します(http://www.splint.org/faq.html#quest14)、しかし、これがスプリントがC99コードを使用して対処するのを手伝ってくれたら驚くでしょう _Complex:

キーワードを無視したい場合は、追加できます -Dnonstandardkeyword= プリプロセッサにキーワードを排除するには、ここで nonstandardkeyword キーワードの名前です。

私はスプリントにヘッダーを無視して、オンラインで適切な答えを見つけられないようにするのに苦労していました。私はついにスプリントの組み込みヘルプを使用し、これを発見しました:

#ifndef S_SPLINT_S

#endif

このペアをコードの周りに配置すると、スプリントを無視したい場合は、それを無視します!少なくとも私が見つけたものは、システムヘッダーファイルでは機能しません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top