問題タブ [splint]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - float と int を比較するときに Splint (C コードチェッカー) がエラーを出すのはなぜですか?
どちらも数学的な値ですが、float の方が精度が高くなります。それがエラーの唯一の理由ですか - 精度の違いですか? それとも、別の潜在的な (そしてより深刻な) 問題がありますか?
c - C99 と ANSI-C の構造体の違いは何ですか?
このコードは ANSI-C では正しくないように見えますが、C99 では問題ありません。
C99 と ANSI-C の struct の違いは何ですか?
編集:「a」を忘れました、悪いです。このコードは、C99 モードの gcc で問題なくコンパイルされますが、すべての C99 拡張機能をサポートしていないことが知られている splint では解析エラーになります。
Edit2: これが splint の出力です:
Edit3: このファイルは eCos fileio.h (このフラグメントの最後の行は 152 行目) です。
c - 変数を宣言する場所をスプリントに無視させるにはどうすればよいですか?
変数を宣言する場所をスプリントに無視させる方法を知っていますか?
古い学校の c では、すべての関数の最初に変数を宣言するように指示されていますが、私は悪い人なので、変数を使用する場所の近くで宣言するのが好きです。良い例は int i; です。for(i=0;...) の直前。
非常に簡単な例を見てみましょう
ここで、splint とほとんどの古い c コンパイラは int i; を移動したいと考えています。1 行上げるか、宣言と for ループを {} で囲みます。
さて、質問ですが、このチェックをオフにするにはどうすればよいですか? しかし、良い他のチェックを続けますか?
ありがとうヨハン
注 1: 私はすでに gcc 警告 (以下を参照) を防御の最初の行として使用し、valgrind を 2 番目の行として使用しています。しかし、私の愚かさを制御できるもののリストに添え木を追加することを考えています;-)しかし、このチェックはただ面倒です.
私が使用する gcc 警告: -Wall -W -Wextra -Wconversion -Wshadow -Wcast-qual -Wwrite-strings -Werror
注 2: 私は、その悪い動作から生じる潜在的な移植性の問題について知っています。しかし、読みやすさが向上すると思います。別名、この型オフ宣言を検索するために上下にジャンプする必要がないことは、より価値があります (これについては別のスレッドで説明します)。
更新: もう少し情報を追加します。上記のコードを main.c というファイルに入れました。使用されているプラットフォームは Ubuntu 8.04 で、エディターとして gvim を使用しています。これは、実行したときの splint からの出力です。
これにより、以前は考えもしなかった 2 つの疑問が生じます。
「現在の値と冗長」、現在の値は?
警告ではなく解析エラーなのはなぜですか?
更新::この問題をサポートするためにスプリントにパッチを適用する可能性があります。これはまだ試していませんが、解決策だと思います。
c - splint は、私の関数が別のファイルで使用されていないことをどのように認識しますか?
Splint から次の警告が表示されます。
このファイルでのみ splint を呼び出したので、どうやってそれを知っているのでしょうか?
main を削除して、ファイルが完全であることを認識できないようにしました。私は完全に困惑しています!
c - スプリントのサンプルrcファイル
コードチェックにスプリントを使用していますが、大量の警告が表示されます。それらのいくつかは、私は無視することができると思います。試行錯誤しながら.splintrcを作成中です。
私の質問、
使用できるサンプルの.splintrcファイルはありますか?
マルチタスク組み込みシステム用に書かれたCコード用のスプリントを使用しています。
c - Splint で null 警告を削除する
私は最近書いた C プログラムでSplintを試し、それが与える警告を理解し、取り除こうとしています。私は理解しているが、それを削除する方法を理解できないのは、次のコード スニペットからのものです。
Splint は、関数が NULL を返す可能性があることに満足していませんが、この場合は完全に理にかなっています。
/ @nullwhenfalse@ / を使用してみましたが、関数が true/false を返す場合にのみ機能するようで、retVal を使用するようにコードを変更しようとし、/ @null@ / と / @relnull@ / の両方を試しました宣言しましたが、これらは何もしませんでした。
(ちなみに、このテーブルはわずか 20 気圧しかないため、巧妙な検索アルゴリズムを使用しても意味がありません。)
c - 複雑なビルドプロセスでプログラム全体を添え木
システムでスプリント全体のプログラム分析を実行したい。ただし、システムは非常に大きく、さまざまな部分がさまざまなコンパイラ定義とインクルードパスでコンパイルされます。この情報を単一のファイルのスプリントに伝達する方法はわかりますが、プログラム全体でそれを行う方法がわかりません。誰かがこれを行う方法を知っていますか?
c - complex.hを含むコードでスプリントが失敗する
複雑な演算をサポートするために、標準Cライブラリをsplint
含むCソースで実行しようとしています。complex.h
残念ながら、splint
次のエラーで失敗します。
Splint 3.1.2---2009年5月3日
/usr/include/bits/cmathcalls.h:54:31:解析エラー:非関数宣言:_Complex:externdouble。(解析エラーのヘルプについては、splint -help parseerrorsを参照してください。)***続行できません。
問題をグーグルで検索すると、分割ディスカッションメーリングリストにこのメッセージのみが表示されました(未回答のままです)。
何か案は?
アップデート
失敗したソースの非常に簡単な例を次に示します。
_Complex
サポートされていないC99キーワードを再定義しようとすると、複素数の虚数部でエラーが発生します(これは驚くことではありません)。
c - C用スプリントコードアナライザー
CコードベースのコードアナライザーとしてSplintを使用することを計画しています。しかし、これまでSplintツールを試したことはなかったので、そのメリット、長所、短所について意見を求めています。