A.splintは、Cプログラムのセキュリティ上の弱点を静的にチェックし、エラーを書くためのツールとしてsplintを紹介しています。 Splintは、未使用の変数、矛盾するタイプ、未定義の変数の使用、実行不可能なコード、戻り値を無視する、返されない実行パス、無限ループなど、さまざまなルーチンチェックを行います。同時に、それをより強力なチェックにするためにソースコードに追加の情報を追加することによって。一方、注釈は、ファイル内の関数、変数、パラメータ、および型の機能を前提とした定型化されたコメントです。
Second.plintのインストールダウンロードアドレス:
http://www.splint.org/downloads/splint-3.1.2.src.tgzソースパッケージのインストール:#tar zxvf splint- 3.1.2.src.tgz#cd splint-3.1.2#mkdir /usr /local /splint#./configure --prefix = /usr /local /splint#make install#vi〜/.bashrc add:export LARCH_PATH = /usr /local /splint /share /splint /libexport LCLIMPORTDIR = /usr /local /splint /share /splint /import#source〜/.bashrc#export PATH = /usr /local /splint /bin /splint:$ PATH 3 .splintの使用1. null参照エラーは、どのメモリアドレスも指していないポインタを参照するときにこのエラーが発生します、つまり、代入なしのポインタが使用されていますSplintは特別なコメントをサポートしています。たとえば、次のプログラムでは/* @ null @ * /を使用して* sの値がNULLになる可能性があることを示しています。
//Null.cchar firstChar1(/* @ null @ * /char * s){return * s;} char firstChar2(/* @ null @ * /char * s){if(s == NULL); '\\ 0'を返す。 return * s;} //ENDこのプログラムをsplintでスキャンすると、次のように出力されます。
#splint null.c Splint 3.1.1 --- 2005年4月28日null.c:(関数firstChar1内)null.c:3:11:nullの可能性があるポインタの間接参照s:* s null.c:1:35:記憶領域の状態がnullになっている可能性があります - - 1つのコードの警告が見つかりましたfirstChar1とfirstChar2の両方が、ポインタsがNULL値である可能性があることを示すNULL記述を使用しているため、splintはs値の使用状況をチェックします。したがって、firstChar2関数のポインタに対する警告メッセージは表示されません2.未定義変数エラーC言語では、使用する前に変数を定義する必要があります。エラー次の例で、/* @ in @ * /で記述されている変数は定義する必要があることを示し、/* @ out @ * /で記述されている変数は関数の実行後に定義されていることを示します。 Br>
//usedef.cextern void setVal(/* @ out @ * /int * x); extern int getVal(/* @ in @ * /int * x); extern int mysteryVal(int * x); Int dumbfunc(/* @ out @ * /int * x、int i){(i> 3)が* xを返す場合;そうでない場合(i> 1)getVal(x)を返す場合;(i == 0) )r Eturn mysteryVal(x); else {setVal(x); return * x;}} //ENDはsplintを使用してusedef.cをチェックします。
$ splint usedef.cSplint 3.1.1 --- 2005年4月28日usedef.c :(関数dumbfunc内)usedef.c:7:19:定義前に使用される値* xある実行パスの値に初期化されていない可能性がある右辺値が使用されます(警告を抑制するために-usedefを使用)。 :18:渡された記憶域xが完全に定義されていない(* xは未定義):getVal(x)パラメータから導出可能な記憶域、戻り値、またはグローバルが定義されていません未使用(警告を抑制するために-compdefを使用)usedef.c:11:22:渡された記憶域xが完全に定義されていない(* xは未定義):mysteryVal(x)検査終了--- 3コード警告//xはプログラムで定義されていないため、エラーは定義されていませんが、setVal()は/* @ out @ * /という記述を使用するため、setVal(x);では戻り値x;で未定義エラーは報告されません。型エラーCにはより多くのデータ型があり、それらの間にはいくつかのニュアンスがあります。型がチェックされます。
例1:
//bool.cint f(int i、char * s、bool b1、bool b2){if(i = 3)b1を返す。もし(!
我々は、電力管理システムを持っていると非常によく知っている、私たちは、高度な電源管理モジュールSTR、STDや他の機能に乗ることができます。ラップトップユーザーが高度な電源管理を使用するには、ラップトップをスリープ状態にして、バッテリーを節約することがさらに重要です。 Windowsプラットフォームでこれらの機能を実装することは、私た
Egrep -i (apm
eth1のリンクENCAPを含め、すべてのネットワークアダプタを確認します:イーサネットのHWaddr IP-
まず、一時的にLinuxのIPの下でネットワークカードを有効にし、設定を構成するいくつかの方法00:0C:34:42:29 D0inetのADDR:192.168.8.201 BCAST:192.16
LinuxサーバーオペレーティングシステムのログファイルIBMが開発したJFSは、もともとAIXオペレーティングシステム上で開発され、ログベースのバイトレベルのトランザクション指向の高性能ファイルシス
Linuxシェルには、条件付きステートメント(if)、ループステートメント(for、while)、および選択ステートメント(case)を含む、独自のフロー制御ステートメントのセットがあります。以下
Adobe Acrobat XI 11.0.5グラフィックインストールチュートリアル
ノートパソコンのWin10 WiFiは常に切断されているWin10 WiFiネットワークの不安定性の解決方法
デュアルシステムを形成するためにWin7のシステムにWin10をインストールするためにWinのディスクを使用する方法
Win10システムでは、インターネットに接続して言語パックの2つの解決策をチェックするための言語パックプロンプトが追加されていますチュートリアル
ごみ箱を直接「してください」とタスクバーに移動してデスクトップを更新する