complex.hを含むコードでのスプリント障害
-
01-10-2019 - |
質問
走ろうとしています 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
このペアをコードの周りに配置すると、スプリントを無視したい場合は、それを無視します!少なくとも私が見つけたものは、システムヘッダーファイルでは機能しません。