問題タブ [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 - Splint のストレージの所有権を譲渡する
C での単純な連結リストの実装を使用して、所有権を譲渡することを Splint に伝えるにはどうすればよいdata
ですか?
次のエラー メッセージが表示されます。
data
解放の責任がリストのデータ構造に移されることを Splint に伝えたいと思います。
visual-studio-2010 - IncludeDirs を外部ツールで使用できるようにする方法
現在、Visual Studio 2010 で外部ツールとしてスプリントを利用できるようにしようとしています。
INCLUDE 変数はビルド時にのみ設定されているようで、インクルード ファイルを抽出する他の方法が見つからないため、ファイルのすべてのインクルードを見つけるのに問題があります。
私の質問:現在のファイルのプロジェクトの [プロパティ] ページから IncludeDir フィールドを抽出する方法はありますか?
c - リテラル Splint の C 文字は互換性のない型を警告します
unsigned chars を使用して小さな範囲の整数を表すプログラムがあります。プログラムのいくつかの異なる部分でそれらを0にクリアする必要があることに気づきました。最近、スプリントの使用も開始しました。
警告を与えます:
リテラル char にはサフィックスがないため、これをどのように解決するのが最善ですか? いくつかのオプションがあると思います:
1: 警告を無視します。
2: 毎回キャスト:
3: コードの長さを削減するために var を作成します。
4: 機能:
c - Splint がスタック変数へのポインタで maxSet をチェックできない
次のようなことを行うプログラムがあります。
関数にポインターを渡し、逆参照して、何かを保存します。Splint はmaxSet(result) >= 0
、f の制約を解決できないと報告しています。
&s
スタック上の単一の文字を指すため、注釈を追加せずに maxSet を 1 にする必要があります。Splint が不平を言っているのはなぜですか?
makefile - Splint を Makefile に挿入するには?
Splint を使用してさまざまなコンポーネントを分析するために、プロジェクトを構成したいと考えています。
Splint で解析を実行するか、通常どおりプログラムをコンパイルするかを尋ねる方法で、コマンド ラインを Makefile に追加する方法を教えてください。
makefile - スプリント : ファイルを開けません
Makefile を介して Splint を使用してプロジェクトの分析を実行しようとすると、次のエラー メッセージが表示されました。
これが私のメイクファイルです:
c - Gradle をカスタム EXE に接続し、そのコンソール出力をフックする方法は?
この質問には、C 言語、Gradle C プラグイン、およびsplintと呼ばれる古い学校のC 静的アナライザーが含まれますが、この質問は、Gradle ビルドを実行可能プロセスに接続する方法を理解している Gradle の第一人者なら誰でも答えることができると思います。
それは非常に簡単です: 次のコマンド ラインを使用して、単純な C プロジェクトのソース コードを分析するために splint をローカルに構成しました。
Gradle (C プラグイン) を介してプロジェクトのビルドを管理しており、ビルド シーケンスの適切な時点で静的解析 (スプリント) を呼び出したいと考えています (それが何であれ)。
splint はコンソールに出力されますが、残念ながら他の場所には出力されません。したがって、このコンソール出力を「フック」し、特定のキーワード (「エラー」、「警告」など) をチェックし、スプリントが何かを訴えた場合にビルドを失敗/停止できるかどうかを確認したいと思います。
そして、私はここでいくつかの問題に取り組もうとしています:
- Gradleからスプリントを呼び出す方法、および適切な段階で? たとえば、CodeNarc が実行されるたびに (コンパイル後? テストの実行後?)、スプリントが呼び出される可能性が高くなります。
- この呼び出しで正しいコマンドライン引数を splint に渡す方法は?
- splint のコンソール出力をフックする方法は?
- コンソール出力に特定のキーワードが含まれている場合にビルドを失敗させる方法は?
これまでの私の最善の試みは次のとおりです。
これにより、次が生成されます。
しかし、私は 100% 自信を持って myworkingDir
とcommandLine
args が間違っていると確信しています。その -statement 内からビルドを失敗/停止する方法がわかりません。また、このタスクをコンパイル前に実行するif
ように「配置」する方法もわかりません。check
テスト。
アイデアはありますか、グラドルの達人ですか?
c - splint 大規模プロジェクト (数百のファイル)
適度に大規模なプロジェクトにSplintを使用しています。すべて問題ありませんが、現在、「弱い」から「チェック」にレベルを上げようとしています。ファイルを 1 つずつチェックしているため、Splint は未定義の関数について文句を言います。Splintには、複数のファイルを個別に分析してから、すべてをまとめて最終分析を行うオプションがあったことを覚えているようです(コンパイル+リンクスタイル)。
マニュアルや一般的なグーグルでこれを行う方法に関する情報が見つかりません。
これは可能ですか?
c - c の破壊関数で free() を使用した後のメモリ リーク (スプリントによる)
C を再学習splint
し、ソース コードのテストに使用しています。
私は次のことをしようとしています:
- 「コンストラクター」関数で構造体を作成する
- 構造体のメモリを解放する「デストラクタ」関数で構造体を破壊します。
ただし、スプリントを使用してコードをテストすると、デストラクタ内の一時ストレージに関連する警告が表示され、デストラクタを呼び出した後にメモリ リークが発生します。
(a) コードのメモリ リークについて splint が正しいかどうか (そうではないと思います)、(b) コードを修正するか、splint に自分のしていることを理解させるにはどうすればよいか、疑問に思っています。
とにかく、ここにコードがあります:
コードはコンパイルされ、gcc で正常に実行されます。
ただし、スプリントを使用してテストすると、スプリントは次の警告を発行します。
最初の警告は、考えれば考えるほどわからなくなります。しかし、そのマニュアルについての適切な質問を正当化するのに十分なほどマニュアルを読んでいません。
メモリ リークに関する 2 番目の警告は、メモリが別の場所で解放されていることを splint が認識していないようです。これは私には奇妙に思えます。free()
内で呼び出すと、警告が消えますmain
。
助けてくれてありがとう。警告の行番号などの詳細が役立つかどうかお知らせください。
c - Cの構造体初期化子で変数を使用することは合法ですか?
次のコードは正常にコンパイルされるようです。
スプリントが失敗する
(これがラインですTest p = {i, 1};
)
これは違法な C ですか、それともスプリントのバグですか?
( p を にしたいのでやりたいのですconst
が、修飾子を外しても失敗するようconst
です。 の宣言と初期化i
を1行にすれば、問題も解消されそうです。)