Section:1 2 3 4 5 6 7 8 9 10 11 12 13 14 A B C D E

Appendix B Flags(フラグ)

フラグには4つの異なる種類があります。

  • 制御の初期化とグローバルの動作のためのグローバルフラグ
  • メッセージをどのように表示するかを制御するためのメッセージ書式フラグ
  • Splintのチェックの粗さ制御のためのモード選択
  • チェックと何のメッセージの種類が報告されるかを制御するチェックフラグ

グローバルフラグは初期化ファイルとコマンドラインで使用可能です。 他のフラグは制御コメント内でも使用することが出来ます。

Key(キー)

各フラグの名前の左側は、それが何の種類のフラグなのか、と、そのデフォルト値 を符号化しているフラグ記述子です。記述子には以下があります。

P: - プレーンフラグ(訳注:プレーン:plain。日本語にするなら「普通の」か「装飾の無い」とかが適切)。 コロンの後の値はデフォルトの設定(例えば、このフラグはオフである。)を示します。

m:--++ モードチェックフラグ。フラグの値はモードの選択により設定されます。 4つの符号は弱(weak)、標準(standard)、チェック(checks)、厳格(strict)のモードでの設定を示します。(例えば、このフラグは弱と標準モードではオフであり、チェックと厳格モードではオンです。)

shortcut ショートカットフラグ。このフラグは他のフラグが設定します。そのため、デフォルト値はありません。

Flag Name Abbreviations(フラグ名の略称)

フラグ名の中では、略称を使用することが出来ます。 図25はフラグ名の略称を示しています。

未省略形式

省略形式

constant

const

declaration

decl

function

fcn

global

glob

implicit, implied

imp

iterator

iter

length

len

modifies

mods

modify

mod

memory

mem

parameter

param

pointer

ptr

return

ret

variable

var

unconstrained, unconst

uncon

図 25  フラグ名の略称

未省略形式と省略形式はフラグ名の中で交換可能です。

例えば、 globsimpmodsnothingglobalsimpliesmodifiesnothing は同じフラグを表します。 フラグ名の略称は、フラグの名前を過度に長くすること無く使用できるようにするために、 発音可能な記述名を許します。 (globsimpmodsnothingでさえ、長くて発音しにくいのを認めなければならないのだが)

フラグ名を読みやすくするために、 スペース、ダッシュ(-)、アンダースコア(_) をフラグ名の中に使用してもかまいません。 従って、globals-implies-modifies-nothingglob_imps_modsnothingglobsimpmodsnothingは同等です。

Global Flags(グローバルフラグ)

グローバルフラグはコマンドライン内、あるいは オプションファイルの中で設定することが出来ますが、 定式化されたコメントを使用して局所的に設定することは出来ません。 これらのフラグはオンラインヘルプ、初期化ファイル、プリプロセッサフラグ ライブラリ、そして、出力を制御します。

Help(ヘルプ)

オンラインヘルプはSplintの操作とフラグ のドキュメントを提供しています。 ヘルプフラグが使用された場合、Splintはチェックを行いません。 ヘルプフラグは-あるいは、 + が前に付く場合があります。

help

一般的なヘルプの概要を表示します。加えて、ヘルプのトピックスのリストも含まれます。

help <topic>

<topic>に関するヘルプを表示します。利用可能なトピックスは以下です。
annotations
 アノテーションについて説明します
comments
 制御コメントについて説明します
flags
 フラグのカテゴリについて説明します
flags <category>
 <category>に関係する全てのフラグ(splint -help flagsによって一覧にされたカテゴリの1つ)
flags alpha
 全てのフラグ(アルファベット順)
flags full
 全てのフラグの完全な説明を表示します
mail
 メーリングリストの情報を表示します
modes
 モードのフラグ設定
prefixcodes
 名前空間接頭辞(名前空間プレフィックス)を設定するための文字コード
references
 関連する論文やウェブサイトへの参照を表示します
vars
 環境変数について説明します
version
 維持者とバージョン情報を出力します

help <flag>

フラグ<flag>を説明します。(複数のフラグを列挙してもかまいません。)

warn-flags

フラグが予想外の方法で設定された場合、警告を表示します。廃止されたフラグが設定された場合、フラグがその現在の値(すなわち、+-が間違っている可能性がある)で設定された場合、あるいは、モードによってリセットされるフラグをチェックするモードが設定された後で、モード選択フラグが設定された場合、エラーが報告されます。デフォルトでは+warn-flagsはオンです。フラグの警告を抑制するには‑warn-flagsを使用してください。

P: + warn-rc
 初期化ファイルを読み込んで問題があった。

P: + bad-flag
 フラグが正しく無い方法で認識されていない、あるいは、使用されていません。

P: + fileextensions
 コマンドラインでファイルが認識されていない拡張子を持つ時に警告します。

Initialization(初期化)

これらのフラグはSplintによって使用される ディレクトリとファイルを制御します。 それらはコマンドラインから、あるいはオプションファイル内にて使用することが出来ますが、 ソースコード内で制御コメントとして使用することは出来ません。 指摘のない限り、前に付く-あるいは+ は同じ意味を持ちます。

tmpdir <directory>

一次ファイルを作成するためのディレクトリを設定します。デフォルトは /tmp/です。

I<directory>

C言語のインクルードファイルを探すパスにdirectoryを追加します。C言語のプリプロセッサフラグ(訳注:恐らく、例えば、gccの-Dオプションのことだと思われる)と一致するよう、Iの後のスペースが無いことに注意してください。

S<directory>

.lcl仕様ファイルを探すパスにdirectoryを追加します。

larchpath <path>

ライブラリファイルを探すパスを設定します。LARCH_PATH環境変数を上書きします。

lclimportdir <directory>

LCLインポートファイルを探すディレクトリを設定します。LCLIMPORTDIR環境変数を上書きします。

f <file>

<file>からオプションを読み込みます。このフラグがコマンドラインから使用される場合、デフォルトの~/.splintrcファイルは読み込まれません。このフラグは別のオプションファイルを含むため、オプションファイル内で使用することも可能です。

i <file>

LCL初期化ファイルを設定します。

nof

デフォルトのオプションファイル(./.splintrc~/.splintrc)が読み込まれないようにします。(-nofの設定は、オプションファイルを正常に読み込ませ、+nofより優先します。)

sys-dirs

システムファイル(デフォルトは/usr/)に対するディレクトリ(複数可)を設定します。使用しているOSに対するパスの区切り文字でディレクトリを区切ってください(Windowsならセミコロンで、Unixならコロンです。例えば、/usr/include:/usr/local/lib)。フラグの設定はシステムディレクトリ内のファイルに伝わります。もし、-sys-dir-errorsが設定された場合、システムディレクトリ内のファイルに対してエラーは報告されません。
Pre-processor(プリプロセッサ)

これらのフラグはプリプロセッサ定数を定義したり、定義を解除したりするために 使用します。-I<directory>フラグもまた、C言語プリプロセッサに渡されます。 D<initializer>

C言語プリプロセッサに渡されます。

U<initializer>

C言語プリプロセッサに渡されます。

P: + unrecogdirective
 プリプロセッサディレクティブは認識されません。

P: + preproc
 プリプロセス時のエラー。

Libraries(ライブラリ)

これらのフラグはライブラリの作成と使用を制御します。

dump <file>

読み込みのために<file>内の状態を保存します。<file>に拡張子がない場合、デフォルトの拡張子.lcdが追加されます。

load <file>

-dumpによって作成された)<file>から状態を読み込みます。<file>に拡張子がない場合、デフォルトの拡張子.lcdが追加されます。1つのファイルのみを読み込むことも可能です。

デフォルトでは-loadフラグがユーザライブラリを読み込むために 使用されなかった場合、標準のライブラリが読み込まれます。 もし、ユーザライブラリが読み込まれなかった場合、以下のフラグの1つを 異なる標準ライブラリを選択するために使用することが可能です。 説明されているライブラリを読み込むためには、フラグの前に +をつけて下さい (あるいは、no-libを使用してライブラリが読み込まれないようにしてください)。 提供されているライブラリについてはSection 14.1を参照してください。

no-lib

どのライブラリも読み込みません。これは標準ライブラリが読み込まれないようにします。

ansi-lib

ANSI標準ライブラリを使用します(デフォルトで選択されます)。

strict-lib

ANSI標準ライブラリの厳格(strict)バージョンを使用します。

posix-lib

POSIX標準ライブラリを使用します。

posix-strict-lib

POSIX標準ライブラリの厳格(strict)バージョンを使用します。

unix-lib

標準ライブラリのUNIXバージョンを使用します。

unix-strict-lib

UNIX標準ライブラリの厳格(strict)バージョンを使用します。

which-lib

標準ライブラリのファイル名と作成情報を出力します。

P: + newdecl
 読み込まれたライブラリありは以前のファイルの中で宣言されていない新しい宣言が存在します。(ライブラリに対する一貫性をチェックするためにこのフラグを使用してください)

P: + impconj
 全ての代替型を暗黙的に作成します(システムライブラリを作るのに便利です)。

Output(出力)

これらのフラグは何の追加情報をSplintが出力するかを 制御します。+<flag>を設定すると、 説明されている情報が出力され、-<flag>を設定すると、それが抑制されます。 デフォルトでは、これらの全てのフラグはオフです。

use-stderr

(標準出力の代わりに)標準エラーにエラーメッセージを送信します。

show-summary

全ての報告されたエラーと出力抑制されたエラーの要約を表示します。抑制されたエラーの個数は必ずしも正しいとは限りません。なぜなら、フラグをオフにすると、計算を省くために同じチェックが行われるのが抑制される場合があり、報告されないエラーが、報告されるときとは異なって伝わる場合があるためです。

show-scan

ファイル名が処理されたことを表示します。

show-all-uses

使用回数でソートされた全ての外部識別子の使用の一覧を表示します。

stats

処理行数とチェック時間を表示します。

time-dist

チェック時間がかかっている箇所の配分を表示します。

quiet

ヘラルドとエラー個数の表示を抑制します。(quietが設定されていない場合、 Splintはチェックを開始する前にバージョン情報を含むヘラルドを出力し、報告されたエラーの総個数を集計する行を出力します。)

iso-lib

ISO標準ライブラリの仕様に基づいたライブラリを使用します。

warn-unix-lib

Unixライブラリが使用されたときに警告します。 Unixライブラリは全てのプラットフォームと互換性があるとは限りません。

which-lib

標準ライブラリのファイル名と作成の情報を出力します。

limit <number>

最大で<number>回の同様のエラーが連続して報告されます。さらに、エラーが抑制され、抑制されたメッセージの個数を表示するメッセージが出力されます。

message-stream <file>

<file>に状態メッセージを送信します。

message-stream-stdout

標準出力に状態メッセージを送信します。

message-stream-stderr

標準エラーに状態メッセージを送信します。

warning-stream <file>

<file>に警告を送信します。

warning-stream-stdout

標準出力に警告を送信します。

warning-stream-stderr

標準エラーに警告を送信します。

error-stream <file>

<file>に致命的なエラーを送信します。

error-stream-stdout

標準出力に致命的なエラーを送信します。

error-stream-stderr

標準エラーに致命的なエラーを送信します。
Expected Errors(期待されるエラー)

通常、Splintはエラーを報告しないことを期待します。 エラーが報告されていない場合、終了ステータスは成功(0)となり、 エラーが報告された場合は失敗となります。 フラグを期待された報告されたエラーの個数を設定するのに使用できます。 期待されたエラーを抑制するメカニズムのため、 これらのオプションは最終的な実際のプログラムのチェックに対して使用されるべきではありませんが、 makeを使用してのプログラムの開発時に便利です。

expect <number>

ちょうど<number>個のコードエラーが期待されています。 Splintは<number>個のコードエラーが検知されない場合は失敗の終了コードで終了します。

Message Format(メッセージフォーマット)

こららのフラグはメッセージがどのように出力されるかを制御します。 それらは、コマンドライン、オプションファイルの中、あるいはセマンティックコメント内で局所的に設定可能です。 line-lenlimitフラグは+-のどちらが前についても同じ意味です。 その他のフラグに対しては、+は説明の内容の出力をオンにし、-はオフにします。 各フラグの左にあるのはそのフラグのデフォルト値です。

+ show-column
 エラーが見つかったときの列番号を表示します。

+ show-func
 エラーを含んでいる関数(あるいはマクロ)の定義の名前を表示します。関数名は、その関数の中で検知された最初のメッセージの前に、一度だけ表示されます。

- show-all-conjs
 全ての可能な代替型(Section 4.4参照)を表示します。

- paren-file-format
 メッセージに <file>(<line> )形式を使用します。(デフォルトはMicrosoft VisualStudioへ互換性のため、Win32に対しては+です。)

+ hints
 エラーを説明するヒントと、各エラーの種類において一番最初に報告されたエラーに対してどういった方法でメッセージが抑制できるかを提供します。

- force-hints
 同じエラーの種類に対しても、ヒントが既に表示されている場合でも、報告された全てのエラーに対するヒントを提供します。

80 line-len <number>
 メッセージ行の最大の長さを <number>文字に設定します。 Splintは<number>より長いメッセージを複数行に分割します。

3 indentspaces <number>
 サブメッセージをインデントするスペースの個数を設定します。

3 locindentspaces <number>
 ファイルの場所(location)で開始するサブメッセージをインデントするスペースの個数を設定します。

- showdeephistory
 警告に記載されている記憶領域についてのすべての入手可能な情報を表示します。

- showloadloc
 ロードファイルについての位置情報を表示します。

- csv
 カンマ区切り(CSV)の警告出力ファイルを生成します。(訳注:+の場合はcsvの後に出力ファイルを指定する必要があります。)

- csvoverwrite
 CSVファイルが存在する場合に上書きします。

- htmlfileformat
 ファイルの場所をリンクとして表示します。

+ streamoverwrite
 ストリーム出力ファイルが存在するファイルを上書きするとき、警告を行い、終了します。

Mode Selector Flags(モード選択フラグ)

モード選択フラグはあらかじめ定義された値へモードチェックフラグを設定します。 それらは報告されるエラーの種類を制御する速くて大雑把な方法を提供します。 特定のチェックフラグはモード選択を上書きするために、モードフラグの後に設定してもかまいません。 モードフラグは、局所的に使用されますが、しかし、 モードの設定は特定のコマンドラインのフラグ設定を上書きするでしょう。 モードチェックフラグが設定された後、モードフラグが使用された場合、警告が発せられます。

これらは各モードが何をするのかの一般的な考え方を与えるための簡単な説明です。 各モードでの完全なフラグの設定を確認するには、splint -help modesを使用してください。 +あるいは-のいずれかが使用されている場合、 モードフラグは同じ効果を持ちます。

weak(弱)

弱いチェックは、アノテーションがない典型的なCコードに対して意図されています。 変更チェック、マクロチェック、暴露の報告、完全なインタフェースチェックは行われません。 int型の戻り値は無視されていてもかまいません。 bool型、int型、char型、そしてユーザ定義のenum型は全て等価です。 古いスタイルの宣言は報告されません。

standard(標準)

デフォルトのモードです。 weak(弱)のチェックは全て行われ、さらに、変更チェック、グローバル、別名チェック、全ての引数の使用、関係する記憶領域の使用、戻り値あるいは任意の型の無視、マクロチェック、到達不能コード、無限ループ、フォールスルーcase(訳注:switch文でbreakが無いcase文のこと)がチェックされます。 bool型、int型、そして、char型は区別されます。古いスタイルの宣言が報告されます。

checks(チェック)

適度に厳密なチェックを行います。standard(標準)のチェックは全て行われ、さらに、必ず必要な変更のチェック、暴露の報告、別名のリターン、メモリ管理、そして、完全にインタフェースがチェックされます。

strict(厳格)

馬鹿馬鹿しいほどに厳格にチェックします。 checks(チェック)の全てのチェックが行われ、さらに、不特定の関数での変更とグローバル変数、厳格な標準ライブラリ、そして、C言語オペレータでの厳格な型がチェックされます。特別な報酬は、strictチェックでエラーを生成しない実際のプログラムを作成した最初の人へ贈られるでしょう。

Checking Flags(チェックフラグ)

これらのフラグはSplintによって行われるチェックを制御します。 これらは構文上のコメントの使用により局所的に、コマンドラインから、あるいはオプションファイル内で 設定されます。いくつかのフラグは直接、特定の種類のメッセージが報告されるかどうかを制御します。 +がフラグの前に付く場合は、 報告をオンにし、-がフラグの前に付く場合は 報告をオフにします。 他のフラグは、実表現へのアクセスなどを制御し、(特定の種類のエラーを防ぐため)型を同等にして、 (アノテーションが暗黙である)デフォルト値を決定することによって、直接のチェック 制御をより少なくします。 これらのフラグに対して、+の効果が 記載され、そして、-の効果はその反対 (あるいは、明確な反対が存在しない場合には、明示的に説明される)です。 このSectionの構成はSection 2-14を反映しています。

Null Dereferences(Section 2)(Nullの参照先の値の取得)

shortcut null

nullの可能性のあるポインタは、参照先のデータを取得されたり、 nullではないポインタが期待されているどこかで使用される可能性があります。(nulldref、 nullpass、 nullassign、そして、 nullstateで設定されます)

m:-+++ nullderef

nullの可能性があるポインタの参照先のデータが取得されます。値は、nullを返す可能性のある関数の戻り(このケースではコードでnullではないことを確認べきです)、あるいは、グローバル、引数、あるいはnull修飾子で宣言された構造体フィールドのいずれかです。

m:-+++ nullpass

nullの可能性のあるポインタが/*@null@*/アノテーション無しで仮引数に対応する引数として渡されています。もし、NULLがこの引数に対して使用される可能性があるなら、関数の引数の宣言に/*@null@*/アノテーションを追加してください。

m:-+++ nullret

関数はnullの可能性のあるポインタを返します。しかし、戻りの/*@null@*/アノテーションが使用されて宣言されていません。もし、関数がNULLを返す可能性があるなら、戻り値の宣言に/*@null@*/アノテーションを追加してください。

m:-+++ nullstate

nullの可能性のあるポインタが、/*@null@*/アノテーションを使用して宣言されていない引数やグローバル変数から到達可能です。

m:-+++ nullassign

nullアノテーションが無い参照がNULLに代入あるいは初期化されています。 nullの可能性のあるポインタとして参照を宣言するために、/*@null@*/を使用してください。
Use Before Definition(Section 3)(定義前の使用)

m:-+++ usedef

いくつかの実行パス上で初期化されない可能性のある値が使用されています。

m:---- impouts

関数のアノテーションが無いポインタ引数が暗黙的なout引数であることを許可します。

m:-+++ compdef

引数から導出可能な記憶領域、戻り値、あるいは、グローバル変数が完全に定義されていません。

m:-+++ uniondef

共用体のフィールドが定義されていません。(もし、少なくとも1つの共用体フィールドが定義されている場合はエラーは報告されません。)

m:-+++ mustdefine

outで宣言された引数が戻るかスコープから外れる前に定義がされていません。

P:+ fullinitblock

初期化子は構造体の全てのフィールドを設定していません。

P:+ initallelments

初期化子は宣言された配列の全ての要素を定義していません。

P:+ initsize

初期化ブロックは宣言された配列のサイズより大きい要素を含んでいます。

m:-+++ incondefs

関数、変数、あるいは定数が異なる型で再定義されています。

m:-+++ functionderef

関数型が逆参照されています。 ANSI標準では、関数呼び出しの暗黙的な変換のためこれを許していますが、しかし、逆参照は不必要です。

m:--++ redundantsharequal

不変(イミュータブル)オブジェクトの宣言が重複したobserver修飾子を使用しています。

m:-+++ misplacedsharequal

共有できないオブジェクトの宣言が共有アノテーションを使用しています。
Types(Section 4 )(型)

P: + type

型が合っていません。

P: + string-literal-too-long

文字列定数はそれを保持するには小さすぎるchar配列に割り当てられています。

m: -+++ string-literal-no-room

文字列定数はNULL終端を保持するのに十分に大きくないchar配列に割り当てられています。

m: ++++ string-literal-no-room-final-null

文字列定数は最後のNULL終端を保持するのに十分に大きくないchar配列に割り当てられています。 NULL文字が予想通りエスケープ文字を使用して文字列定数に含まれているため、これは、問題ないかもしれません。

m: --++ string-literal-smaller

文字列定数は文字列定数が必要とするより小さいchar配列に割り当てられています。

m: --++ enum-members

列挙メンバーに対する初期値の型はint型である必要があります。
Boolean Types(Section 4.2 )(真偽値型)

これらのフラグは真偽値を表現するために使用される型の名前と、 Boolean型が抽象型かどうかを制御します。

P: - bool

Boolean型は抽象型です。

P: bool booltype <name>

Boolean型の名前を<name>に設定します。

P:FALSE boolfalse <name>

Booleanのfalseの名前を<name>に設定します。

P: TRUE booltrue <name>

Booleanのtrueの名前を<name>に設定します。

P: + likelybool

Splintは真偽値型に見える型を見つけました。デフォルトの真偽値型の名前を変更するには-booltype、 -boolfalse と -booltrueフラグを使用してください。
Predicates(述部)

m:--++ pred-bool-ptr

判別式の型がポインタです。

m:-+++ pred-bool-int

判別式の型が数値型です。

m:++++ pred-bool-others

判別式の型がBoolean、ポインタ、あるいは、整数値ではありません。

shortcut pred-bool

predboolintpredboolptrpreboolothersを設定します。

P: + pred-assign

条件式が代入式です。代入が意図されたものである場合、余分に括弧の入れ子を追加してください(例えば、if ((a = b)) ...)。
Primitive Operations(基本的な演算)

m:---+ ptr-arith

ポインタと整数値を含む演算です。

m: --++ nullptrarith

nullである可能性のあるポインタと整数値を使用しているポインタ演算です。

m: ++-- boolops

真偽値の演算子のオペランドが真偽値ではありません。ポインタで使用される!を許可するには+ptrnegateを使用してください。

m:++-- ptr-negate

!演算子のオペランドがポインタであることを許します。

m:---+ bitwise-signed

ビット演算子のオペランドが符号なしの値ではありません。これは符号ありの表現に依存する予期しない結果につながる可能性があります。

m: ---+ shiftimplementation

シフト演算子の左側のオペランドが負である可能性があります(動作は実装定義です)。

m: -+++ shiftnegative

シフト演算子の右側のオペランドが負である可能性があります(動作は定義されていません)。

m:-+++ shift-signed

シフト演算子の左側のオペランドが符号なしの値ではありません。

m:---+ strict-ops

基本的な演算子は厳密な型チェックをしていません。

m:---+ sizeof-type

sizeof演算子のオペランドが型です。(より安全には、sizeof (int)の代わりに、int *x = sizeof (*x);を使用してください。)
Array Formal Parameters(配列型の仮引数)

これらのフラグは配列型の仮引数の文法についての混乱によって発生する一般的なエラーの報告を制御します。

P: + sizeof-formal-array

sizeof演算子が配列として宣言された引数として使用されています。(結果は、配列の要素数ではなく要素型へのポインタのサイズであるため、多くの場合、これは予期しない動作になります。)

P: + fixed-formal-array

配列型の仮引数が固定サイズ(例えば、int x[20])で宣言されています。サイズは無視されるため、これは混乱する可能性があります。

P: - formal-array

仮引数が配列として宣言されています。これは、問題ではありませんが、しかし、引数はポインタとして扱われるため、混乱する可能性があります。
Format Codes(書式コード)

P: + format-code

printflikeあるいはscanflike アノテーション付きの関数に対しての書式文字列の中の書式コードが無効です。

P: + format-type

printflikeあるいはscanflikeアノテーション付きの関数内の書式コードに対応する引数の型が合っていません。

P: + format-const

書式引数がコンパイル時に決定できません。これは、実引数に対して型チェックが出来ないため、セキュリティ上の脆弱性になりかねません。
Main(main関数)

P: + main-type

main関数の型が、予想される型(戻り値の型がint型で、引数は、無いか、int型とchar **型の2つです。)に一致しません。
Comparisons(比較)

m:-+++ bool-compare

Boolean値間で比較しています。任意の0では無い値がtrueと解釈され、複数のtrue値があるので、これは危険です。

m:-+++ real-compare

float値、あるいは、 double値を含む比較です。浮動小数点表現は不正確であるため、予想できない結果を生じる可能性があるため、これは危険です。

m:-+++ ptr-compare

ポインタと整数値間での比較です。

m:-+++ unsigned-compare

符号なしの値が、バグあるいは混乱のいずれかの方法により0との比較で使用されています。
Type Equivalence(型の等価)

m: +--- void-abstract

抽象型へのポインタを一致させるために、void *を許可します。(もし、+void-abstractフラグが設定されている場合は、 voidポインタへ抽象型へのポインタをキャストしてもかまいません。)

P: + cast-fcn-ptr

関数へのポインタはvoidポインタへ(あるいはその逆へ)キャスト(あるいは使用)されます。

m:+--- forward-decl

抽象的な表現へのポインタの前方宣言は抽象型に一致しています。

m:-+++ imp-type

変数の宣言は暗黙的な型を持っていません。型は暗黙的にintです。

P: + incomplete-type

仮引数が不完全な型で宣言されています(例えば、int[][])。

m:+--- char-index

配列の要素番号にcharを許可します。

m:---- enum-index

配列の要素番号にenum型のメンバを許可します。

m:+--- bool-int

boolintが等価であるとします。(Booleanが整数型が期待されている場所に使用されている場合に型エラーが報告されません。)

m:+--- char-int

char型と int型が等価であるとします。

m:+--- charunsignedchar

char型と unsigned char型を一致させるためには、 +charunsignedcharを使用してください。

m:++-- enum-int

enum型と int型が等価であるとします。

m:+--- float-double

float型と double型が等価であるとします。

m:---- ignore-quals

型修飾子(longshortunsigned)を無視します。

m:++-- relax-quals

危険な場合(大きい型が小さい型に代入されるか、引数で渡された場合、比較がsignedunsignedの値を使用している場合、情報が欠落する)のみ修飾子の不一致を報告します。

m:---- ignore-signs

型比較時の符号を無視します(unsignedsignedと同じです)。



P: - long-integral

long型が任意の整数型に一致するのを許可します(例えば、dev_t

m:+--- long-unsigned-integral

unsigned long型が任意の整数型に一致するのを許可します(例えば、dev_t)。

P: - match-any-integral

任意の整数型が任意に一致することを許可します。

P: - long-unsigned-unsigned-integral

unsigned long型が任意の符号無し整数型に一致するのを許可します(例えば、size_t)。

m:+--- long-signed-integral

long型が任意の符号あり整数型に一致することを許可します(例えば、ssize_t)。



P: + num-literal

整数値定数は浮動小数点として使用することが出来ます。

P: - char-int-literal

文字定数はintとして使用出来ます。

P: + zero-ptr

定数0はポインタとして使用出来ます。

P: + zero-bool

0をBool値として扱います。

P: - relax-types

全ての数値型が一致することを許可します。



m: +--- shortint

short int型とint型が等価であるとします。
Abstract Types (Section 4.3 )(抽象型)

P: + abstract

データの抽象障壁が破られています。

P: - imp-abstract

concreteアノテーションを使用していない型宣言に対する暗黙の abstractアノテーション。

m:-+++ mut-rep

変更可能な型の表現がセマンティクスを共有しています。
Access (Section 4.3.1) (アクセス)======

P: + access-module

M.hで定義された(あるいはM.lclで指定された)抽象型が M.c内にてアクセス可能です。

P: + access-file

typeと名付けられた抽象型がtype.*と名付けられたファイル内にてアクセス可能です。

P: + access-czech

typeと名付けられた抽象型は type_nameと名付けられた関数内にてアクセス可能でもかまいません。 (Section 12.1.1)

P: - access-slovak

typeと名付けられた抽象型は typeNameと名付けられた関数内にてアクセス可能でもかまいません。 (Section.12.1.2)

P: - access-czechoslovak

typeと名付けられた抽象型は type_nameあるいは、 typeNameと名付けられた関数内からアクセス可能でもかまいません。 (Section 12.1.3)

shortcut access-all

access-moduleaccess-file、と、 access-czechを設定します。
Memory Management (Section 5 )(メモリ管理)

メモリ管理エラーの報告は設定しているチェックフラグ、暗黙のアノテーションとコードアノテーションによって制御されます。

Deallocation Errors (Section 5.2) (解放エラー)

m:-+++ use-released

メモリが解放されている可能性が発生した後で、それが使用されています。

m:---+ strict-use-released

配列要素が解放されている可能性が発生した後で、それが使用されています。
Inconsistent Branches(一貫性のない分岐)

m:-+++ branch-state

メモリが複数ある実行パスの分岐で状態が一致していません。(例えば、if文でtrueの場合は解放されているが、そうでない場合は解放されていない)

m:---+ strict-branch-state

配列の取得を通すメモリが複数ある実行パスの分岐で状態が一致していません。配列の要素が正確にチェックされていないために、これが擬似的なエラーを生じされている可能性があります。

m:--++ dep-arrays

dependentメモリとして配列要素を扱います。配列の要素のチェックはSplintによって正確に行うことは出来ません。 dep-arraysフラグが設定されていない場合、配列の要素は非依存(independent)として想定され、同じ要素を複数回解放するコードはエラーになりません。 dep-arraysが設定されている場合、配列の要素は依存(dependent)として想定され、同じ要素を複数回解放するコードはエラーになります。しかし、異なる要素を正しく解放するコードは擬似的なエラーを生じさせます。
Memory Leaks(メモリリーク)

m:-+++ must-free

取得されたメモリが、スコープを抜けるか、関数から抜ける前に解放されていません。onlyfresh、あるいは、 ownedのメモリに対してエラーが報告されます。

m:-+++ mustfreefresh

取得されたメモリが、スコープを抜けるか、関数から抜ける前に解放されていません。fresh のメモリに対してエラーが報告されます。

m:-+++ mustfreeonly

取得されたメモリが、スコープを抜けるか、関数から抜ける前に解放されていません。only のメモリに対してエラーが報告されます。

shortcut memchecks

動的メモリのチェックフラグを設定します (memimplicit, mustfree, mustdefine, mustnotalias, null, memtrans )。

m:-+++ comp-destroy

void *型のout only引数から導出可能な全てのonly参照は解放されなければなりません。(これはfree関数の引数の型ですが、ユーザ定義の解放関数に対して使用されてもかまいません。)

m:---+ strict-destroy

解放されている可能性のある配列の要素に対して、正しい破棄のエラーを報告します。(もし、strict-destroyが設定されていない場合、 Splintは、任意の配列の要素が解放された場合に、配列全体が正しく解放されたと想定します。)
Transfer Errors(転送エラー)

矛盾している方法により、(代入、引数渡し、戻り値による返しによって) 記憶領域が転送された場合、転送エラー(transfer error)が報告されます。

shortcut mem-trans

メモリ転送エラーのフラグを全て設定します。

m:-+++ only-trans

Onlyである記憶領域がOnlyではない参照へ転送されました(メモリリーク)。

m:-+++ ownedtrans

所有(Owned)する記憶領域が所有しない参照へ転送されました(メモリリーク)。

m:-+++ fresh-trans

新しく割り当てられた記憶領域がOnlyではない参照へ転送されました(メモリリーク)。

m:-+++ shared-trans

共有(Shared)されている記憶領域が共有されていない参照へ転送されました。

m:-+++ dependent-trans

一貫性の無いdependent転送です。 依存(dependent)記憶領域が非依存参照へ転送されています。

m:-+++ temp-trans

一時的な記憶領域(temp仮引数に関連付けられている)は、 一時的ではない参照に転送されています。 記憶領域は解放されるか新しい別名が作成されてもかまいません。

m:-+++ kept-trans

保管された記憶領域(keepとして渡された記憶領域)が 一時的ではない参照へ転送されました。

m:-+++ keep-trans

保持記憶領域がそれへの新しい別名を追加するか解放する可能性のある方法で 転送されました。

m:-+++ refcount-trans

参照がカウントされる記憶領域が一貫性の無い方法で転送されました。

m:-+++ newref-trans

新しい参照が参照がカウントされる参照へ転送されました (参照カウントが正しく設定されない)。

m:-+++ immediate-trans

即時アドレス(&の結果)が一貫性なく転送されています。

m:-+++ static-trans

静的な記憶領域が一貫性の無い方法で転送されています。

m:-+++ expose-trans

一貫性の無い暴露転送です。暴露されている記憶領域は 暴露されていない(exposedではない)、 observerではない参照へ転送されました。

m:-+++ observer-trans

一貫性の無いobserver転送です。 Observer記憶領域がObserverではない参照へ転送されました。

m:-+++ unqualified-trans

修飾されていない記憶領域が一貫性の無い方法で転送されました。
Initializers(初期化)

m:--++ only-unq-global-trans

Only記憶領域が修飾されていないグローバルあるいは静的な参照に転送されました。 新しい参照が解放を必要としないため、 これはメモリリークにつながる可能性があります。

m:--++ static-init-trans

静的な記憶領域が一貫性の無い方法で初期値として使用されています。

m:--++ unqualified-init-trans

修飾されていない記憶領域が一貫性の無い方法で初期値として使用されています。
Derived Storage(導出される記憶領域)

m:-+++ comp-mem-pass

引数から導出可能な記憶領域は、仮引数に期待される別名の種類と一致していません。
Stack References(スタック参照)

m:++++ stack-ref

関数が戻るとき、スタック参照が外部の参照によって指されています。 関数が戻るとき呼び出しフレームは破棄されるため、戻り値は死んだ記憶領域を指しています。 (Section 5.2.6)
Implicit Memory Annotations (Section 5.3 ) (暗黙のメモリアノテーション)======

shortcut all-imp-only

glob-imp-only, ret-imp-only, struct-imp-only, specglobimponly, specretimponlyspecstructimponly フラグを設定します。

P: + glob-imp-only

アノテーションの無いグローバル記憶領域をonlyと仮定します。

P: + param-imp-temp

アノテーションの無い引数をtempと仮定します。

P: + ret-imp-only

アノテーションの無い戻り値の記憶領域を onlyと仮定します。

P: + struct-imp-only

アノテーションの無い構造体、あるいは共用体のフィールドを onlyと仮定します。

shortcut code-imp-only

glob-imp-onlyret-imp-onlystruct-imp-onlyを設定します。

m:-+++ mem-imp

修飾されていない記憶領域に対してメモリエラーを報告します。

m:---- pass-unknown

アノテーションの無い引数はアノテーションをクリアするように 値を渡します。これはアノテーションを付けていないプログラムに対して多くの偽のエラーが 報告されることを防止します。しかし多くのエラーの検知の可能性を排除します。
Sharing (Section 6)(共有)
Aliasing (Section 6.1 )(別名)

m:-+++ alias-unique

unique仮引数として渡される実引数は 他の引数あるいはグローバル変数によって別名化されています。

m:-+++ may-alias-unique

unique仮引数として渡される実引数は 他の引数あるいはグローバル変数によって別名化されている可能性があります。

m:-+++ must-not-alias

関数が戻るとき、別名が temp修飾されている引数あるいは、 外部から見えるグローバル変数へ追加されています。

m:--++ ret-alias

関数は引数あるいはグローバルに別名を返します。
Exposure (Section 6.2 )(暴露)

shortcut rep-expose

抽象型の内部表現は呼び出し側からは可視です。 これはクライアントが抽象的な表現の中のポインタへのアクセス券を持っていることを 意味します。 (assign-expose, ret-exposecast-exposeを設定します。)

m:--++ assign-expose

抽象的な表現は代入あるいは引数渡しによって暴露されています。

m:--++ cast-expose

抽象的な表現はキャストを介して暴露されています。

m:--++ ret-expose

抽象的な表現は戻り値を介して暴露されています。
Observer Modifications(Observerの変更)

P: + mod-observer

observer記憶領域の変更が可能です。

m:---+ mod-observer-uncon

observer付きで宣言されている記憶領域 は制約の無い関数への呼び出しを通して変更されます。
String Literals (Section 6.2.1)(文字列定数)

m:--++ read-only-trans

読み取り専用の文字列定数への初期化に対してメモリ転送エラーを報告します。

m:-+++ read-only-strings

文字列定数は読み取り専用です(ISO文法)。 文字列定数が変更、あるいは解放される可能性がある場合、エラーが報告されます。
Function Interfaces (Section 7 )(関数インタフェース)
Modification (Section 7.1)(変更)

P: + modifies

文書化されていない呼び出し側から可視の状態の変更です。 +modunconが無く、 変更句付きで宣言された(あるいは、指定された)関数の定義内でのみ、 変更エラーが報告されます。

m:--++ must-mod

文書化されている変更は検知されません。 関数に対しての変更句内にリスト化されたオブジェクトは、実装によって変更されません。

shortcut mod-uncon

変更句無しで宣言された関数内で 変更エラーを報告します。 (mod-nomodsmod-globs-nomodsmod-strict-globs-nomodsを設定します。)

m:---+ mod-nomods

(グローバル変数を含まない) 変更句無しで宣言された関数内で変更エラーを報告します。

m:---+ mod-uncon-nomods

制約の無い関数は変更がチェックされる関数本体内で 呼び出されます。制約の無い関数はどのような変更もする可能性があるため、 チェックされた関数内に検知されない変更が存在する可能性があります。

m:---+ mod-internal-strict

internalState(内部状態)を 変更する関数が、その変更句の中のinternalState をリスト化していない関数から呼び出されています。

m:---+ mod-file-sys

関数がファイルシステムを変更しますが、 fileSystemアノテーションが変更句の中にリスト化されていません。
Global Variables (Section 7.2 )(グローバル変数)

グローバルとファイル静的変数の 使用と変更を伴うエラーは、フラグの設定、グローバル変数が宣言された場所のアノテーション、 と、グローバルが使用されている関数がグローバル句と共に宣言されているかどうかに依存します。

P: + globs

グローバルリストを持つ関数の中でチェックされたグローバル変数の 文書化されていない使用。

m:++++ glob-use

グローバルリストの中にリスト化されたグローバルが 実装では使用されていない。

m:---+ glob-noglobs

グローバルリストが無い関数の中でチェックされたグローバルの使用。

m:---+ internal-globs

内部状態の文書化されていない使用(globals internalStateを持つべきです)。

m:---+ internal-globs-noglobs

グローバルリストを持たない関数の中での内部状態の使用。

m:-+++ glob-state

関数が、矛盾した状態(nullあるいは未定義)でのグローバル で返ります。

m:--++ all-globs

uncheckedでアノテーション付けされていないグローバルに対する 使用と変更エラーを報告します。

m:++++ check-strict-globs

checkedstrictグローバルに対する 使用と変更エラーを報告します。
Modification of Global Variables(グローバル変数の変更)

m:-+++ mod-globs

チェックされたグローバル変数の文書化されていない変更。

m:---+ mod-globs-unchecked

uncheckedグローバル変数の 文書化されていない変更。

m:---+ mod-globs-nomods

変更句が無い関数の中でチェックされたグローバル変数の 文書化されていない変更。

m:---+ mod-strict-globs-nomods

変更句無しで宣言された関数の中でcheckedstrictグローバル変数の 文書化されていない変更。
Globals Lists and Modifies Clauses(グローバルリストと変更句)

m:---+ warn-missing-globs

変更句で使用されるグローバル変数が グローバルリスト内にリスト化されていません。 (グローバルはグローバルリストへ追加されます。)

m:---+ warn-missing-globs-noglobs

グローバルリストの無い関数の変更句で使用される グローバル変数。

m:--++ globs-imp-mods-nothing

関数がグローバルリストと共に宣言されましたが、 何も変更しないと想定された変更句がありません。

m:---- mods-imp-noglobs

関数が変更句と共に宣言されましたが、 グローバルを使用しないと想定されたグローバルリストがありません。
Implicit Checking Annotations(暗黙のチェックアノテーション)

m:---- imp-checked-globs

チェックしないアノテーションを持つグローバル変数に暗黙のcheckedアノテーション。

m:---- imp-checked-statics

チェックしないアノテーションを持つ暗黙の checked修飾子ファイル静的スコープ変数。

m:---- imp-checkmod-globs

チェックアノテーションが無いグローバル変数への 暗黙のcheckmod修飾子。



m:---- imp-checkmod-statics

チェックアノテーションの無い暗黙のcheckmod修飾子 ファイル静的スコープ変数。

m:---+ imp-checkedstrict-globs

チェックアノテーションの無いグローバル変数への 暗黙のchecked修飾子。

m:---+ imp-checkedstrict-statics

チェックアノテーションが無い暗黙の checked修飾子 ファイル静的スコープ変数。

m:--++ imp-checkmod-internals

チェックアノテーションの無い関数スコープ静的変数への 暗黙のcheckmod修飾子。

m:-+++

(訳注:原文を見ると、確かに書いてある。何かのミスだと思いますが)
Global Aliasing(グローバルの別名化)

shortcut glob-alias

関数がグローバルを別名化する外部状態と共に返ります。 (checkstrict-glob-aliaschecked-glob-aliascheckmod-glob-aliasunchecked-glob-aliasを設定します)。

m:-+++ checkstrict-glob-alias

関数がcheckedstrictグローバルを別名化する 外部状態と共に返ります。

m:-+++ checked-glob-alias

関数がcheckedグローバルを別名化する外部状態 と共に返ります。

m:-+++ checkmod-glob-alias

関数がcheckmodグローバルを別名化する外部状態と 共に返ります。

m:--++ unchecked-glob-alias

関数がuncheckedグローバルを別名化する 外部状態と共に返ります。
Declaration Consistency (Section 7.3)(宣言の一貫性)

m:-+++ incon-defs

識別子が一貫性の無い型で再宣言、あるいは、再定義されました。

m:-+++ incon-defs-lib

ライブラリの中で定義されている識別子が一貫性の無い型で 再定義されました。

m:---- overload

標準ライブラリ関数がオーバロードされています。

m:-+++ match-fields

structあるいは enum 型が一貫性の無いフィールドあるいはメンバで再定義されました。
Macros (Section 11 )(マクロ)

これらのフラグはマクロ定義と呼び出しの 展開とチェックを制御します。

Macro Expansion(マクロ式)

これらのフラグはどのマクロが関数あるいは定数と としてチェックされるのか、プリプロセッサ時にどのように展開されるのかを 制御します。/*@notfunction@*/で始まる マクロはこれらのフラグの設定に関係なく決して展開されることはありません。 これらのフラグはソースファイル制御コメントの中で使用されてもかまいません。

P: - fcn-macros

引数リスト付きで定義されたマクロは 展開されず、関数としてチェックされます。

P: - const-macros

引数リスト無しで定義されたマクロは 展開されず、定数としてチェックされます。

shortcut all-macros

fcn-macrosconst-macrosを設定します。

P: - lib-macros

ロードライブラリ内で宣言された識別子を定義しているマクロは 展開されず、ライブラリの情報に従ってチェックされます。
Macro Definitions(マクロ定義)

これらのフラグは何のエラーがマクロ定義内で報告されるかを 制御します。

m:-+++ macro-stmt

マクロ定義は文法的に関数と同等ではありません。 これは、マクロが文(例えば、if (test) macro();)として使用された場合、 予期しない動作を生じることを意味しています。 修正はdo { … } while (FALSE)でマクロ本体を囲むことです。

m:-+++ macro-return

マクロの本体が return文 を使用する関数として宣言されました。 これは関数によって実装することができない動作を示します。

m:-+++ macro-assign

マクロの引数が代入式の左辺として使用されています。

m:-+++ macro-parens

マクロ引数が(潜在的に危険な文脈で)括弧無しで使用されています。

m:---+ macro-empty

関数のマクロ定義が空です。

m:-+++ macro-redef

マクロが再定義されています。 同じ名前で定義された別のマクロが存在します。

m:-+++ macro-unrecog

マクロ定義内で認識されていない識別子が現れています。 マクロが使用される場所で識別子が定義されている可能性があるため、 これは問題ありません。しかし、Splintは適切に認識されていない識別子 をチェックすることは出来ません。
Corresponding Declarations(対応する宣言)

m:++++ macro-match-name

iterあるいはconstantマクロは 前の構文のコメントの中で使用したものとは別の名前を使用して定義されます。

shortcut macro-decl

マクロ定義が対応する宣言を持っていません (macrofcndeclmacroconstdeclフラグを設定します。)

m:-+++ macro-fcn-decl

引数リスト付きのマクロ定義が対応する関数プロトタイプ を持っていません。 プロトタイプが無い場合、マクロ結果と引数の型は不明です。

m:-+++ macro-const-decl

引数リスト無しで定義されたマクロが 対応する定数宣言を持っていません。

P: + next-line-macros

定数あるいはイテレータ宣言が直にマクロ定義によって 続かれていません。
Side Effect Free Parameters (Section 11.2.1 )(副作用が無い引数)

これらのフラグはチェックされた関数マクロの呼び出しと関数の呼び出しで 一貫性の無い副作用を持つ引数に対して報告するエラーを制御します。

m:-+++ sef-params

副作用を持つ実引数がsefアノテーション付きで 宣言された仮引数として渡されています。

m:--++ sef-uncon

何かを変更する可能性のある制約が無い(変更句無しで宣言された)関数 への呼び出しを伴う実引数がsef引数として渡されています。
Iterators(イテレータ)

P: + iterbalance

イテレータが結び <iter> で終わっていません。

P: + iteryield

イテレータが、引数が不適当になる結果を生じさせます。

P: - has-yield

イテレータがyieldアノテーション付きでコメント付けされた 引数無しに宣言されています。
Naming Conventions (Section 12)(命名規則)

P: + name-checks

他の設定を変更せずに、全ての名前のチェックのオン・オフを設定します。
Type-Based Naming Conventions (Section 12.1)(型ベースの命名規則)
Czech Naming Convention(チェコの命名規則)

shortcut czech

完全なチェコの命名規則を選択します (access-czechczech-fcnsczech-varsczech-constsczech-macrosczech-typesを設定します。)。

P: + access-czech

チェコの命名規則に従う抽象型へのアクセスを許可します。 tと名付けられた抽象型の表現は t_nameと名付けられた関数あるいは定数 の定義の中でアクセス可能です。

P: - czech-fcns

関数名あるいはイテレータ名が チェコの命名規則に一致していません。

P: - czech-vars

変数名がチェコの命名規則に一致していません。

P: - czech-macros

展開されたマクロ名がチェコの命名規則に一致していません。

P: - czech-consts

定数名がチェコの命名規則に一致していません。

P: - czech-types

型名がチェコのの命名規則に一致していません。 チェコの型名ではアンダースコア文字を使用することは出来ません。
Slovak Naming Convention(スロバキアの命名規則)

shortcut slovak

完全なスロバキアの命名規則を選択します (access-slovakslovak-fcnsslovak-varsslovak-constsslovak-macrosslovak-typesを設定します。)。

P: - access-slovak

スロバキアの命名規則に従う抽象型へのアクセスを許可します。 tと名付けられた抽象型の表現は tNameと名付けられた関数あるいは定数の定義の中で アクセス可能です。

P: - slovak-fcns

関数名あるいはイテレータ名がスロバキアの命名規則に一致していません。

P: - slovak-macros

展開されたマクロ名がスロバキアの命名規則に一致していません。

P: - slovak-vars

変数名がスロバキアの命名規則に一致していません。

P: - slovak-consts

定数名がスロバキアの命名規則に一致していません。

P: - slovak-types

型名がスロバキアのの命名規則に一致していません。 スロバキアの型名では大文字は含められません。
Czechoslovak Naming Convention(チェコスロバキアの命名規則)

shortcut czechoslovak

完全なチェコスロバキアの命名規則を選択します (access-czechoslovakczechoslovak-fcnsczechoslovak-varsczechoslovak-constsczechoslovak-macrosczechoslovak-types)。

P: - access-czechoslovak

チェコスロバキアの命名規則による抽象型へのアクセスを許可します。 tと名付けられた抽象型の表現は t_nameあるいは tName と名付けられた関数あるいは定数の定義の中でアクセス可能です。

P: - czechoslovak-fcns

関数名がチェコスロバキアの命名規則に一致していません。

P: - czechoslovak-macros

展開されたマクロ名がチェコスロバキアの命名規則に一致していません。

P: - czechoslovak-vars

変数名がチェコスロバキアの命名規則に一致していません。

P: - czechoslovak-consts

定数名がチェコスロバキアの命名規則に一致していません。

P: - czechoslovak-types

型名がチェコスロバキアの命名規則に一致していません。 チェコスロバキアの型名では大文字あるはアンダースコア文字は含められません。
Namespace Prefixes (Section 12.2)(名前空間プレフィックス)

macro-var-prefix <prefix string>

マクロの本体の中で宣言された変数に対する 名前空間プレフィックスを設定します(デフォルトはm_です。)

P: + macro-var-prefix-exclude

マクロの本体の外で宣言された変数は macro-var-prefixで設定した値で始まります。

tag-prefix <prefix string>

structunion、あるいは、 enumのタグの識別子 の名前空間プレフィックスを設定します。

P: - tag-prefix-exclude

タグではない識別子がtagprefixで設定した値から始まっています。

enum-prefix <prefix string>

enumのメンバに対する 名前空間プレフィックスを設定します。

P: - enum-prefix-exclude

enumのメンバではない識別子が enumprefixで設定した値で始まっています。

file-static-prefix <prefix string>

ファイルstatic宣言に対する名前空間プレフィックスを設定します。

P: - file-static-prefix-exclude

ファイル静的ではない識別子がfilestaticprefixで設定した値で始まっています。

global-prefix <prefix string>

グローバル変数に対する名前空間プレフィックスを設定します。

P: - global-prefix-exclude

グローバル変数ではない識別子がglobalprefixで設定した値で始まっています。

type-prefix <prefix string>

ユーザ定義型に対する名前空間プレフィックスを設定します。

P: - type-prefix-exclude

型名ではない識別子がtypeprefixで設定した値から始まっています。

external-prefix <prefix string>

外部識別子に対する名前空間プレフィックスを設定します。

P: - external-prefix-exclude

外部ではない識別子がexternalprefixで設定した値で始まっています。

local-prefix <prefix string>

ローカル変数に対する名前空間プレフィックスを設定します。

P: - local-prefix-exclude

ローカル変数ではない識別子がlocalprefixで設定した値で始まっています。

unchecked-macro-prefix <prefix string>

未チェックマクロに対する名前空間プレフィックスを設定します。

P: - unchecked-macro-prefix-exclude

未チェックマクロの名前ではない識別子がuncheckedmacroprefixで設定した値で始まっています。

const-prefix <prefix string>

定数に対する名前空間プレフィックスを設定します。

P: - const-prefix-exclude

定数ではない識別子がconstantprefixで設定した値で始まっています。

iter-prefix <prefix string>

イテレータに対する名前空間識別子を設定します。

P: - iter-prefix-exclude

iterではない識別子が iterprefixで設定した値で始まっています。

proto-param-prefix <prefix string>

関数プロトタイプ中の引数に対する名前空間プレフィックスを設定します。

P: - proto-param-prefix-exclude

関数プロトタイプ中の引数ではない識別子がprotoprarmprefixで設定した値で始まっています。

m:--++ proto-param-name

関数プロトタイプ中の引数は名前を持ちます (マクロ定義を邪魔する可能性があります)。

m:---+ proto-param-match

関数定義中の引数の名前が関数のプロトタイプ宣言中の対応する引数の名前 に一致していません(protoparamprefixの除去後)。
Naming Restrictions (Section 12.3)(命名規則)

m:-+++ shadow

宣言が外側のスコープで見える名前を再利用しています。
Reserved Names(予約された名前)

m:--++ ansi-reserved

外部名がコンパイラあるいは標準ライブラリにて予約されている名前と衝突しています。

m:---+ ansi-reserved-internal

内部名がコンパイラあるいは標準ライブラリにて予約されている名前と衝突しています。

m:--++ iso-reserved

外部名がISO C99標準によるシステム使用で予約されています。

m:---+ iso-reserved-internal

内部名がISO C99標準によるシステム使用で予約されています (標準に違反するCライブラリ実装とマクロを心配しない限り、これは必要ではありません)。

m:--++ cpp-names

内部名あるいは外部名がC++で予約された単語に衝突しています。 (プログラムがC++コンパイラでコンパイルされる場合、問題が起きます)
Distinct External Names(異なる外部名)

P: - distinct-external-names

外部名はexternalnamelenで設定した文字数の 有意な文字を使用している別の外部名と区別できません。

P: 6 external-name-len <number>

外部名で有意な文字の数(ANSIデフォルトの最小は6です。)を設定します。 +distinct-external-namesを設定します。

P: - external-name-case-insensitive

外部名でアルファベッドの大文字小文字は 影響しないようにします(区別しないようにします)。 ANSI標準に従うと外部名は大文字小文字は影響させる必要はありません。 +distinct-external-namesフラグを設定していない場合 外部名の長さを無制限として +distinct-external-namesを設定します。
Distinct Internal Names(異なる内部名)

m:---- distinct-internal-names

内部名はinternalnamelenで設定した文字数の有意な文字 を使用している別の内部名と区別できません。 (internal-name-case-insensitive internal-name-lookalike によっても影響されます。)

P: 31 internal-name-len <number>

内部名の有意な文字の数を設定します。 +distinct-internal-namesを設定します。

P: - internal-name-case-insensitive

大文字小文字の区別が内部名に意味があるかを設定します (-internal-name-case-insensitiveは 大文字小文字を区別するという意味です) +distinct-internal-namesが 設定されていない場合、内部名の長さが無制限で +distinct-internal-namesを設定します。

P: - internal-name-lookalike

類似した文字(例えば、“1”と“l”)を探して 内部名でマッチさせるかどうかを設定します。
Control Flow (Section 8)(制御フロー)
Undefined Evaluation Order (Section 8.2 )(未定義の評価順序)

m:-+++ eval-order

サブ式にどのような順番で評価されても構わない干渉する副作用が含まれているため、 式の動作が未定義あるいは実装依存です。

m:---+ eval-order-uncon

サブ式に、変更あるいは他のサブ式から使用される何かを変更する可能性のある制約の無い(変更句が無い)関数 への呼び出しが含まれているため、式は定義されていない可能性があります。
Problematic Control Structures (Section 8.3 )(問題のある制御構造)

m:-+++ inf-loops

無限ループの可能性があるループが検出されました(Section 8.3.1)。

m:--++ inf-loops-uncon

無限ループの可能性があるループが検出されました。 ループの評価部あるいは本体が検知されない変更を生む可能性のある制約の無い関数を呼び出します。

m:---+ elseif-complete

else ifの構成に続く最後のelseがありません(Section 8.3.5)。

m:-+++ case-break

breakが続かない空ではないcaseがswitchの中にあります(Section 8.3.2)。

m:-+++ first-case

switchの後の最初のステートメントがcaseではありません。

m:-+++ Duplicate-case

switchの中に同じcaseがあります。

m:-+++ miss-case

enum型のswitchは 列挙メンバーに対するcaseが欠けています。

P+ emptyreturn

値を返すよう宣言された関数において何も返していません。

P+ alwaysexits

ループ述語は常に終了します。

shortcut loop-exec

全てのループは少なくとも1回は実行されると想定します。 これは、定義前の使用とメモリのチェックをもたらします。 これは恐らく、グローバルで使用すべきではなく、偽のメッセージを防止するために 常に実行されることが知られている特定のループの周りで使用することが出来ます。 ( for-loop-exec, while-loop-execiter-loop-exec を設定します。)

P- for-loop-exec

全ての for ループは少なくとも1回は実行されると想定します。 これは、定義前の使用とメモリのチェックをもたらします。 これは恐らく、グローバルで使用すべきではなく、偽のメッセージを防止するために 常に実行されることが知られている特定のループの周りで使用することが出来ます。

P- while-loop-exec

全ての while ループは少なくとも1回は実行されると想定します。 これは、定義前の使用とメモリのチェックをもたらします。 これは恐らく、グローバルで使用すべきではなく、偽のメッセージを防止するために 常に実行されることが知られている特定のループの周りで使用することが出来ます。

P- iter-loop-exec

全ての iter ループは少なくとも1回は実行されると想定します。 これは、定義前の使用とメモリのチェックをもたらします。 これは恐らく、グローバルで使用すべきではなく、偽のメッセージを防止するために 常に実行されることが知られている特定のループの周りで使用することが出来ます。

P+ obvious-loop-exec

常に実行するように決定することができるループは常に行うと想定します。
Deep Break (Section 8.3.3 )(深いBreak)

shortcut deep-break

ネスト化されたwhileforあるいはswitchの中のbreak文に対して エラーを報告します。 (全てのネスト化されたbreakとcontinueフラグを設定します。)

m:--++ loop-loop-break

whilefor あるいは、イテレータループの内側にある whilefor あるいは、イテレータループの内側にbreakがあります。 メッセージを抑制するためには/*@innerbreak@*/を付けて下さい。

m:--++ switch-loop-break

switch文の中にある whileforあるいはイテレータループの内側に breakがあります。 /*@loopbreak@*/を付けて下さい。

m:---+ loop-switch-break

whileforあるいはイテレータループの内側にある switch文の内側に breakがあります。 /*@switchbreak@*/を付けて下さい。

m:---+ switch-switch-break

switch文の内側にある もう一つのswitch文の内側に breakがあります。 /*@innerbreak@*/を付けて下さい。

m:---+ loop-loop-continue

whileforあるいはイテレータループの内側にあるwhileforあるいはイテレータループ の内側にcontinueがあります。 /*@innercontinue@*/を付けて下さい。
Loop and if Bodies (Section 8.3.4)(ループとifの本体)

shortcut all-empty

ifwhileあるいはfor文に本体がありません。 (if-emptywhile-emptyfor-emptyを設定します。)

shortcut all-block

ifwhile あるいは for 文にの本体にブロックがありません (if-blockwhile-blockfor-blockを設定します。)

m:--++ while-empty

while文に本体がありません。

m:---+ while-block

while文の本体に ブロックがありません。

m:---+ for-empty

for文に本体がありません。

m:---+ for-block

for文の本体にブロックがありません。

m:++++ if-empty

if文に本体がありません。

m:---+ ifblock

if文の本体に ブロックがありません。
Suspicious Statements (Section 8.4)(疑わしい文)

m:-+++ unreachable

コードは任意の考えられる実行に対し到達できません。

m:-+++ noeffect

文は効果がありません。

m:---+ noeffect-uncon

制約の無い関数の呼び出しを含む文は効果が無い可能性があります。

m:-+++ noret

void以外の値を返すよう 宣言された関数内で returnしないパスがあります。
Ignored Return Values (Section 8.4.2 )(戻り値の無視)

エラーが戻り値を使用しないで呼び出している関数に対して報告される際に これらのフラグが制御します。 voidを返す関数呼び出しに落とすか、 /*@alt void@*/を返すように呼び出された関数を宣言してください。

m:-+++ ret-val-bool

bool型の戻り値が無視されています。

m:-+++ ret-val-int

int型の戻り値が無視されています。

m:++++ ret-val-other

boolあるいはint以外の型の戻り値が無視されています。

shortcut ret-val

戻り値が無視されています(retvalboolretvalintretvalotherを設定します)。
Memory Bounds (Section 9)(メモリ境界)

shortcut bounds

メモリの読み込み・書き込みは確保された記憶領域の範囲外の可能性があります (boundsreadboundswriteを設定します)。

m:---- boundsread

メモリの読み込みは確保された記憶領域を超えて参照しています。 (likelyboundsreadも設定します)

m:---- boundswrite

メモリ書き込みは確保されたバッファーを超えたアドレスへ書き込んでいる可能性があります (likelyboundswriteも設定します)

shortcut likelybounds

恐らくメモリの読み込みと書き込みは確保された記憶領域の範囲外です。 (likelyboundsreadlikelyboundswriteを設定します)

m:---- likelyboundsread

恐らくメモリの読み込みは確保された記憶領域を超えて参照しています。

m:---- likelyboundswrite

恐らく、メモリの書き込みは確保されたバッファーを越えたアドレスへ書き込みしています。

m:---- fcnpost

関数の事後条件を表示します。

m:---- redundantconstraints

見かけ上冗長な条件を表示します。

m:---- checkpost

関数の実装はensures句の中で与えられる事後条件を満足させていない可能性があります。

P- showconstraintparens

制約条件を括弧で表示します。

P+ showconstraintlocation

生成された全ての制約に対して場所を表示します。

以下のフラグは主にSplintの開発者にとって興味のあるものです。デフォルト値は通常の使用で十分です。 これらは完全を期すために含まれています。

P- debugfcnconstraint

エラーが抑制される場合でもバッファーオーバーフローのチェックを行います。

P- implictconstraints

関数に対しての暗黙の制約を生成します。 これは実験的なオプションです。 現在、このオプションは境界値エラーの個数を減らしますが、本当のエラーを見逃す原因になります。

P- orconstraint

このフラグは内部的な制約の解決に影響します。 設定した場合、内部の制約の解決はより正確です。 このフラグが設定されていない理由はほとんどないため、パフォーマンスへの影響は最小限に抑えられます。
Extensible Checking (Section 13 )(拡張可能なチェック)

P- mts <filename>

メタ状態の宣言と対応するxhファイルを読み込みます。

m:++++ statetransfer

遷移はユーザが定義した状態の規則に違反しています。

m:++++ statemerge

制御パスのマージはユーザが定義した状態のマージの規則に違反しています。
Completeness (Section 13 )(完全性)
Unused Declarations (Section 13.1 )(使用されていない宣言)

決して使用されない宣言に対してエラーが報告される際、これらのフラグが制御します。 unusedアノテーションは 未使用エラーが特定の宣言に対しての報告されるのを抑制するのに使用出来ます。

m:---+ top-use

外部宣言はどのファイルにおいても使用されていません。

m:-+++ const-use

定数は使用されていません。

m:-+++ enum-mem-use

列挙メンバーは使用されていません。

m:++++ var-use

変数は使用されていません。

m:-+++ param-use

関数の引数は使用されていません。

m:++++ fcn-use

関数は使用されていません。

m:++++ type-use

定義された型は使用されていません。

m:-+++ field-use

構造体、あるいは共用体のフィールドは使用されていません。

m:---+ unused-special

特殊ファイル(.lあるいは.yに対応する)の中の宣言は使用されていません。
Complete Programs (Section 13.2)(完成したプログラム)

m:--++ decl-undef

関数、変数、イテレータあるいは定数が宣言されていますが、定義されていません。

shortcut partial

部分的なシステムとしてチェックします。 (-decl-undef-export-localを設定し、 .cファイルに対応しないヘッダファイル 内のマクロのチェックを抑制します。)
Exports(外部公開)

m:---+ export-local

宣言は外部公開されていますが、このモジュールの外で使用されていません。 (宣言はstatic修飾子を使用できます。)

m:--++ export-header

宣言(変数以外)は 外部公開されていますが、ヘッダファイルの中にはありません。

m:--++ export-header-var

変数の宣言が外部公開されていますが、 ヘッダファイルの中にはありません。
Unrecognized Identifiers(認識されていない識別子)

P: + unrecog

認識されていない識別子が使用されています。

P: + sys-unrecog

システムのプレフィックス(接頭辞)、__(アンダースコア2個)で始まる 認識されていない識別子を報告します。

P: - repeat-unrecog

認識されていない識別子に対して複数のメッセージを報告します。 repeatunrecogが設定されていない場合、 特定の認識されていない識別子がファイルに現れる最初の1回だけ、エラーが報告されます。
Multiple Definition and Declarations(多重定義と多重宣言)

P: + redef

関数、あるいは、変数が複数回定義されています。

m:--++ redecl

識別子が複数回宣言されています。

m:-+++ nested-extern

extern宣言が関数の本体の中で使用されています。
ISO Conformance(ISO準拠)

m:--++ noparams

関数は引数リストのプロトタイプなしで宣言されています。

m:---+ old-style

関数の定義は古いスタイルの構文です。 標準のプロトタイプ構文が好ましいです。

m:-+++ exit-arg

exitへの引数は実装定義された動作を持ちます。 exitへの有効な引数は、 EXIT_SUCCESSEXIT_FAILURE0のみです。 exitへの引数がこれら以外であるとSplintが静的に 決定できる場合、エラーが報告されます。

P: + use-varargs

<varargs.h>が使用されている場合、 報告します(stdarg.hを使用すべきです)。
Limits(制限)

ANSI規格には準拠するコンパイラがサポートしなければならない最小値に制限があります。 特定のコンパイラがこれらの制限を越えていない場合であろうと、 他のコンパイラでプログラムを安全にコンパイルするために、プログラムがそれらを超えていない ことを確認することには価値があります。 さらに、コード内で制限を越えていると問題がある可能性があります (例えば、ネストの深さの上限を超えた場合、それは複雑すぎです)。 それは、コンパイラに関係なく修正をすべきです。 Splintは以下の制限をチェックします。 各制限に対して、最大値がコマンドラインから(あるいは局所的に定型化されたコメントを使用して) 設定されます。 下限値はISO C99の仕様のため増えました。 iso99-limitsフラグが使用された場合、 制限はISO C99準拠のコンパイラの最小値でチェックされます。 ansi89-limitsフラグが使用された場合、 全ての制限はANSI C89準拠のコンパイラの最小値でチェックされます。

shortcut ansi89-limits

ANSI C89規格で規定された下限値の違反をチェックします (control-nest-depthstring-literal-leninclude-nestnum-struct-fieldsnum-enum-membersを設定します)。

shortcut iso99-limits

ISO C99規格で規定された下限値の違反をチェックします (control-nest-depthstring-literal-leninclude-nestnum-struct-fieldsnum-enum-membersを設定します。)。

m:---+ control-nest-depth <number>

複合文、反復制御構造、選択制御構造のネストの深さの最大値を設定します (ISO C99では最小値は63、ANSI C89では最小値は15です)。

m:---+ string-literal-len <number>

文字列定数の長さの最大値を設定します (ISO C99では最小値は4095、ANSI C89では最小値は509です)。

m:---+ num-struct-fields <number>

struct、又は、unionの フィールドの最大数を設定します (ISO C99では最小値は1023、ANSI C89では最小値は127です)。

m:---+ num-enum-members <number>

enum型のメンバの最大数を設定します。 (ISO C99では最小値は1023、ANSI C89では最小値は127です)。

m:--++ include-nest <number>

#includeファイルのネストの最大値を設定します。 (ISO C99では最小値は63、ANSI C89では最小値は8です)。
Header Inclusion (Section 14.3 )(ヘッダーのインクルード)

P: + skip-ansi-headers

標準ANSIヘッダーに一致する名前を持ち、システムディレクトリの中にあるヘッダーファイル のインクルードを防止します。 標準ライブラリの中のシンボリック情報が代わりに使用されます。 標準ライブラリを含むライブラリが使用される場合のみ、有効なフラグです。 ANSIヘッダーはassertctypeerrnofloatlimitslocalemathsetjmpsignal、 stdargstddefstdiostdlibstringsstringtime、 と wcharです。

P: + skip-iso-headers

標準ISO C99ヘッダーに一致する名前を持ち、 システムディレクトリの中にあるヘッダーファイル のインクルードを防止します。 標準ライブラリの中のシンボリック情報が代わりに使用されます。 標準ライブラリを含むライブラリが使用される場合のみ、有効なフラグです。 ISO C99ヘッダーは、 assertcomplexctypeerrnofenvfloatinttypesiso646limitslocalemathsetjmpsignal、 stdargstdboolstddefstdiostdlibstringtgmathtimewcharwctypeです。

P: + skip-posix-headers

標準POSIXヘッダーに一致する名前を持ち、 システムディレクトリの中にあるヘッダーファイル のインクルードを防止します。 標準ライブラリの中のシンボリック情報が代わりに使用されます。 POSIXライブラリを含むライブラリが使用される場合のみ、有効なフラグです。 スキップされるPOSIXヘッダーは、 direntfcntlgrppwdtermiossys/statsys/timessys/typessys/utsnamesys/waitunistdutimeです。

P: + warn-posix-headers

POSIXではないライブラリを使用したプログラムをチェックする際に、 POSIXヘッダーの使用を報告します。


P: + warn-unix-headers

Unixライブラリは全てのプラットフォームにおいて互換性があるとは限らないことを ユーザに警告します。

P: - skip-sys-headers

システムディレクトリ内の全てのヘッダーファイルのインクルードを防止します。

P: + sys-dir-expand-macros

ロードライブラリの中で定義されている名前に対応するマクロを除いては、 他の設定にかかわらず、システムディレクトリ内のマクロを展開します。

m:---+ sys-dir-errors

システムディレクトリ内のファイル内でエラーを報告します。 (-sys-dirsにより設定されます)。


P:+ warn-sys-files

システムファイルがコマンドラインファイルとして一覧化されていたが、しかし、 Splintがシステムファイルに対するエラーを報告するよう設定されたいない場合、警告します。 これはSplintがシステムディレクトリ内で実行されているときに システムファイル内で誤って警告が欠落することを防ぎます。

global: - single-include

一度だけ各ヘッダーファイルをインクルードするために ヘッダーファイルのインクルードを最適化します。

global: - never-include

ヘッダーファイルのインクルードの変わりに ライブラリの情報を使用します。

global: - case-insensitive-filenames

ファイル名は大文字小文字を区別しません(file.hとFILE.Hは同じファイルです)。
Comments(コメント)

これらのフラグは構文上のコメントがどのように解釈されるかを制御します。

P: @ comment-char <char>

構文上のコメントに対するマーカー文字を設定します /*<char>で始まる コメントがSplintによって解釈されます。

P: - noaccess

アクセスコメントを無視します。

P: - nocomments

全ての定式化されたコメントを無視します。

P: + sup-counts

エラーの実際の個数は/*@i<n>@*/の中の数字に一致していません。

P: + lint-comments

従来のlintコメント (/*FALLTHROUGH*//*NOTREACHED*//*PRINTFLIKE*/)を解釈します。

m:-+++ warn-lint-comments

従来のlintコメントが使用されている場合、警告を出力し、代替案を提示します。

P: + unrecog-comments

定式化されたコメントが認識されていません。

P: + unrecog-flag-comments

構文上のコメントが認識されないフラグを設定しようとしています。

P: + annotationerror

宣言は無効なアノテーションを使用しています。

P: + commenterror

構文上のコメントは矛盾して使用されています。
Parsing(解析)

P: - continue-comment

行の継続マーカー(\)が コメントに近いと同じ行のコメント内にあります。 プリプロセッサはこれを正しく処理するべきですが、 あるプリプロセッサでは問題が起きます。

P: + nest-comment

コメントオープンシーケンス(/*) がコメントの中にあります。これは通常、以前のコメントが閉じられていないことを示します。

P: - slashslashcomment

//コメントが使用されています。 ISO C99では//は許されていますが、 それ以前ではそうではありません。

P: + duplicate-quals

型の修飾子(例えば、unsignedunsigned)の重複を報告します。

P: + gnu-extensions

いくつかのGNU、Microsoft言語拡張をサポートします。

P: + syntax

エラーを解析します。

P: - try-to-recover

解析エラーからの回復を試みます。 もし、trytorecoverが設定されていなければ、 Splintは解析エラーの検出後、チェックを中止します。 設定されていれば、Splintは回復しようとしますが、Splintは 最小限のエラーリカバリのみしか実行しません。 解析エラー後のリカバリを試みることが、内部的な表明違反につながる 可能性があります。
Warn use(使用への警告)

m: -+++ bufferoverflow

バッファーオーバーフローにつながる可能性のある関数を使用しています。

m: ++++ bufferoverflowhigh

バッファーオーバーフローにつながる可能性のある関数を使用しています。

m: --++ implementationoptional

ISO99では必須ではなく任意の実装である宣言を使用しています。

m: --++ multithreaded

リエントラントではない関数はマルチスレッドのコードで使用すべきではありません。

m: --++ portability

実装依存の動作を持っている可能性がある関数を使用しています。

m: --++ superuser

スーパーユーザに制限された関数を呼び出しています。

m: ---+ toctou

TOCTTOU(Time of Check to Time of Use)の脆弱性の可能性があります。

m: ---- unixstandard

UNIXの実装によって提供される必要の無い関数が使用されています。
ITS4 compatibility flags(ITS4互換性フラグ)

P: - its4mostrisky

セキュリティ上の脆弱性がits4データベース内で最も危険と分類されています。

P: - its4veryrisky

セキュリティ上の脆弱性がits4データベース内で非常に危険と分類されています。

P: - its4risky

セキュリティ上の脆弱性がits4データベース内で危険と分類されています。

P: - its4moderate

セキュリティ上の脆弱性がits4データベース内でまあまあ危険と分類されています。

P: - its4low

セキュリティ上の脆弱性がits4データベース内で危険と分類されています。
Debug flags(デバッグフラグ)

P: 3 bugslimit

停止する前に検出されるバグの最大数を設定します。

m: ---- debugfcnconstraint

エラーが抑制される場合であっても、バッファーオーバーフローのチェックを行います。

P: - grammar

解析をデバッグします。デバッグ情報が生成されたbisonを出力します。

P: - keep

一時ファイルを削除しません。

P: - nopp

プロプロセッサ入力ファイルを削除しません。

P: - showsourceloc

警告が生成されるソースコードの場所を出力します。

このドキュメントはSplint(英)のサイトを元に作成しました