This Project Has Not Released Any Files
ライブラリはインタフェースの情報を記録するために使用されます。 標準C言語ライブラリについての情報を含むライブラリは ライブラリの呼び出しのチェックを有効にするために使用されます。 プログラムライブラリは大規模なプログラムの中で単一のモジュール の高速チェックを有効にするために作成されます。
ライブラリの関数の呼び出しをチェックするために、 Splintはアノテーションが付けられた標準ライブラリを使用します。 これは、関数のインタフェースについてのより詳細な情報を含み、それから、 アノテーションを使用するため、 システムのヘッダファイルで提供されています。 さらに、それは、ISO C99標準でドキュメント化されている関数のみを 含んでいます。 多くのシステムではそれらのシステムライブラリ内に追加関数を含みます; これらの関数を使用するプログラムは、それらを提供していない他のシステム上では コンパイルすることは出来ません。 ライブラリで定義されている特定の型は抽象型として扱われています (例えば、プログラムはFILE型がどのように 実装されているかに依存してはなりません)。 ソースコードをチェックする際、Splintはライブラリ内のファイルに対応した システムヘッダを含んでいますが、しかし、代わりに、 標準ライブラリのライブラリ説明を使用します。
Splintの配布物にはいくつかの異なる標準ライブラリが 含まれています: ANSI標準ライブラリ、POSIX標準ライブラリ *19、そして、Open GroupのSingle Unix Specification(唯一のUNIX仕様)に基づく、 UNIXライブラリです。 それぞれのライブラリには2つのバージョンがあります: 標準バージョンと厳格バージョンです。
Splintの規定の動作はISO標準ライブラリ(standard.lcdからロードされる) を使用することです。 このライブラリはISO C99標準に記述されている標準ライブラリに基づいています。
POSIXライブラリは+posixlibフラグにより選択されます。 POSIXライブラリはIEEE Std 1003.1-1990に基づいています。
UNIXライブラリは+unixlibフラグにより選択されます。 このライブラリはOpen GroupのSingle Unix Specificationのバージョン2に基づいています。 free関数は nullではない引数で宣言されています。 ISOはfree関数が引数にNULLを扱えると明記していますが、 しかし、いくつかのUNIXプラットフォームでは NULLが free関数に渡されるとクラッシュします。
ライブラリのより厳格なバージョンが使用されるのは、 -ansi-strict、 posix-strict-libあるいは unix-strict-libフラグが使用された場合です。 これらのライブラリはライブラリのより厳格な解釈を使用します。 それらはいくつかのプログラムではより多くのエラーを検出しますが、 典型的なコードに対してより多くの偽のエラーを生成する可能性があります。
標準のライブラリと厳格なライブラリの違いは以下の通りです。
ライブラリのフラグが使用されていない場合、Splintは 標準のライブラリ、standard.lcd を読み込みます。 +nolibが設定されている場合、 どのライブラリも読み込まれません。 ライブラリのソースファイルは簡単に修正することが出来、 特定のアプリケーションにより適合するように 新しいライブラリを作成することが出来ます。
大規模なシステムでSplintの実行を可能とするため、 必要な情報を含むライブラリを生成するためのメカニズムが提供されています。 これは、ライブラリが作成された後、ソースファイルを独立してチェックすることが可能であることを 意味します。 コマンドラインのオプション-dump library でファイルlibrary(デフォルトの拡張子.lcdが追加される) の中に情報を格納します。 次に、-load libraryで、ライブラリを 読み込みます。 ライブラリには、ライブラリが作成されたときにチェックされたファイルからの インタフェース情報が含まれます。
標準ライブラリはSplintの配布物の中に含まれるヘッダファイルから生成されます。 いくつかのライブラリは複数のヘッダファイルから生成されます。 POSIXライブラリは、標準ライブラリを包含しているため、 標準ライブラリとPOSIXライブラリに対するヘッダはPOSIXライブラリ を作成するために結合されます。 同様に、UNIXライブラリは標準ヘッダ、POSIXヘッダ、そしてUNIXヘッダから 構成されています。 ヘッダファイルは、STRICT定義することにより 条件付で選択されるいくつかのセクションを含みます。 標準ライブラリを生成するためのコマンドは以下の通りです。
に遭遇したときのSplintの標準的な動作は、 インクルードファイルの検索パス(-Iを使用して設定される)と、 システムの基本インクルードパス(デフォルト値、通常/usr/includeが 設定、あるいは使用している場合、include環境変数から読み込まれる) 上で、X.hと名付けられたファイルを 検索することです。 X.hが 読み込まれた標準ライブラリにあるヘッダファイルの名前であり、かつ、 X.h がシステムディレクトリ(-sysdirsフラグで設定される。デフォルトは/usr/include)であるディレクトリ内で 発見される場合、+skip-iso-headersあるいは、 +skip-posix-headers (X.hがISO あるいは POSIXのどちらのヘッダファイルなのかに依存する) がオン(両方ともデフォルトでオン)の場合、X.hはインクルードされません。 全てのヘッダが正常にインクロードされることを強制するには -skip-iso-headersフラグを使用してください。
時には、システムディレクトリ内にあるヘッダーに Splintでは解析できない標準ではない構文が含まれていることがあります。 +skip-sys-headersフラグは システムディレクトリ内のインクルードファイルがインクルードされないように するために使用されます。
Splintは中規模(10,000行)のプログラムを パフォーマンスを気にすることなく実行できるくらい十分速いです。 ライブラリは大規模なプログラム内で小さなモジュールの効率的なチェックを 可能とするために使用できます。 さらにパフォーマンスを向上させるために、ヘッダーファイルのインクルードを最適化することが出来ます。
たくさんのファイルが同じヘッダーをインクルードする 完全なシステムを処理する場合、処理時間の大部分は、必要の無い無駄な ヘッダーファイルの再読み込みです。 もし、100個のファイルからなるプログラムをチェックし、各ファイルが utils.hをインクルードしている場合、 Splintは(多くのCコンパイラも同じだろうが)utils.hを100回処理する必要があります。 もし、+single-includeフラグが使用されている場合、 各ヘッダーファイルは一度しか処理されません。 ヘッダーファイルの単一処理は、たくさんのファイルに分割された大規模なプログラムをチェックする際に 大幅な改善効果を生み出します。しかし、同じヘッダーファイルが 異なるコンテキストで常に同じ意味でインクルードされている場合しか安全ではありません (例えば、別のインクルード場所で、異なる定義で定義されたプリプロセッサ変数に依存しない)。
大規模システムにて1つのファイルを処理する場合、 時間の大部分はヘッダーファイルのインクルードの処理に費やされています。 ヘッダファイル内の情報が代わりにライブラリに格納されている場合、これを避けることが出来ます。 もし、+never-includeが設定されている場合、 .hで終わる ファイルのインクルードを防止することが出来ます。 異なる接尾辞を持つファイルは、通常は含まれます。 これを行うため、ヘッダーファイルは拡張されたマクロを含んではなりません。 つまり、ヘッダーファイルは+all-macrosで処理される必要があり、 ヘッダーファイル内の /*@notfunction@*/制御コメント は存在してはなりません。 それから、+never-includeフラグは ヘッダーファイルのインクルードを防止するために使用可能です。 あるいは、関数マクロではないマクロが、.h で終わらない名前で異なるファイルに移動することが出来ます。 ファイルから間接的にインクルードされる場合、.h が無視され、他のファイルが決してインクルードされないため、 このファイルは.c ファイルから直接インクルードされる必要があることを覚えてください。
これらのオプションは大規模システムで大幅なパフォーマンス 向上のために使用することが出来ます。 パフォーマンスはコードがどのように構造化されているのかに依存しますが、 ライブラリと+noincludeフラグが使用された場合、 大規模なプログラムの1つのモジュールのチェックは数倍速くなります。
Splintはソースファイルのプリプロセッサ時に、定数S_SPLINT_Sを定義しています。 もし、Splintを使用するときのみ、処理を行うコードを含めたい場合、 以下で囲んでください。
このドキュメントはSplint(英)のサイトを元に作成しました
[PageInfo]
LastUpdate: 2014-02-11 15:07:24, ModifiedBy: daruma_kyo
[License]
Creative Commons 2.1 Attribution-ShareAlike
[Permissions]
view:all, edit:login users, delete/config:members