問題タブ [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 静的アナライザー: splint.rc 構成ファイルが見つからない (Windows)
Splint FAQによると:
Win32 の場合、DOS ファイル名の制限により、Splint は .splintrc の代わりに splint.rc を探します。最初に現在のディレクトリが検索され、次にホーム ディレクトリが検索されます。
Splint を動作させるための非常に簡単なテストをセットアップしました。
- ステップ1:抽出
splint-3.1.1.win32.zip
するc:\splint
ステップ 2:
c:\test\test.c
簡単なプログラムを入力します。ボイドメイン(ボイド){}
ステップ 3: 「cmd」を実行する
- ステップ 4: コマンドを入力します。
cd c:\test\
次に、splint.rc なしで、フラグなしで、splint を使用しようとします。
- ステップ 5: コマンド「c:\splint\bin\splint.exe test.c」を入力します
予想どおり、これにより出力が生成されますThe function main does not output the expected type
次に、splint.rc と -maintype フラグなしで、splint を使用しようとします。
- ステップ 5: コマンド「c:\splint\bin\splint.exe test.c -maintype」を入力します
予想どおり、出力は生成されなくなりましThe function main does not output the expected type
た。
次に、-maintype フラグが含まれる splint.rc を使用して、splint を使用しようとします。
- ステップ5:
c:\test\splint.rc
中身を入れます-maintype
。 - ステップ 5: コマンド「c:\splint\bin\splint.exe test.c」を入力します
に入力-maintype
しsplint.rc
、そこに含まれるディレクトリから splint コマンドを実行しているためsplint.rc
、splint は main 関数に関する警告を表示するべきではありませんが、表示されます。私は、スプリントが splint.rc 構成ファイルを取得していないと推測しています。
私は何を間違っていますか?ありがとう
c - 非標準関数の戻り値の型: Splint 解析エラーの修正
組み込みシステム XC8 C コンパイラ (PIC マイクロプロセッサ用) を使用しています。以下が許可されています。
ただし、非標準の C であるため、Splint 静的アナライザーは次のエラーを返します。
解析エラー: 非関数宣言: ビット: "--------------------------------------"整数。
エラーのファイル/行は、それぞれの .h ファイルの関数プロトタイプです。
Splint が残りのファイルを分析できるようにするには、どうすればこれを修正できますか? 次の 2 つの方法があると思います。
CLI 経由で Splint に渡すことができるフラグを見たことを覚えていると思います。これは、指定された非標準型を標準型に置き換えるように指示します (たとえば、bit を unsigned char に置き換える) が、今はまったく見つからないようです!
また、おそらく、ANSI-C 要件を満たしながら、XC8 が戻り値の型を
bit
?
進捗:
フォーラムで次の情報を見つけましたが、マニュアルで -D フラグの使用方法に関する情報が見つかりません。
キーワードを無視するには、 -Dnonstandardkeyword= を追加して、プリプロセッサがそれを削除するようにします
と
-Dspecialtype=int を使用して、カスタム型を int として解析します。
c - Splint: 非標準型の `bit` を `unsigned char` に置き換えます
(これは私の前の質問の延長です)。Windows CLI で Splint を使用しています。
XC8 組み込み C コンパイラには、カスタム タイプがありbit
ます。Splint に解析させるには、CLI オプションを渡します。
ただし、に置き換える必要がありbit
ますunsigned char
。スペース文字が問題です。上記のフラグを変更するにはどうすればよいですか?
mysql - Splint と MySQL: 非 null パラメータとして渡された null ストレージ
短い CGI スクリプトで Splint を使用しようとしていますが、次のエラーが発生します。
Null storage passed as non-null param: mysql_init(NULL)
mysql_init
パラメータが の場合は新しい値を返し、そうNULL
でない場合は結果をパラメータに格納するように定義されています。それでも、やってみると
私は手に入れます:
Variable connection used before definition
これを解決するには?mysql.h
もちろん、1 つの方法は、 Splint が文句を言わないように注釈を付けることです。私の唯一の解決策ですか?
mysql - Splint は、ライブラリ関数がメモリを解放していることを知りません
C で MySQL を使用する場合、次のように MySQL API を使用してメモリを解放します。
しかし、Splint はそれmysql_close
が実際にメモリを解放していることを認識していないため、次のエラーが発生します。
mysql_close
Splint にメモリの割り当てを解除していることを伝えるにはどうすればよいですか? mysql.h
ファイルへの特別な注釈?
EDITreleases *p
:ヘッダー ファイルで使用できる場合は、おそらく注釈です。しようとします。
編集 2 : に追加/*@releases *sock@*/
されましたmysql.h
が、次のエラーが発生します:
これは の署名ですmysql_close
:
c - Splint:動的配列を使用した「定義の前に使用される値の文字列[]」
Cで文字列の動的配列を使用しています:
私はそれを初期化します:
そして、いくつかのダミー文字列をコピーします:
しかし、これを印刷しようとすると:
Splint から次のエラーが表示されます。
このようなチェックNULL
は役に立ちません:
sincestrings[i]
はまだ「定義前」に使用されています。
これを解決する方法についてのアイデアはありますか?
編集:代わりにリンクされたリストでこれを試してみると思います。
また、完全なコード リスト: