フラグには4つの異なる種類があります。
グローバルフラグは初期化ファイルとコマンドラインで使用可能です。 他のフラグは制御コメント内でも使用することが出来ます。
各フラグの名前の左側は、それが何の種類のフラグなのか、と、そのデフォルト値 を符号化しているフラグ記述子です。記述子には以下があります。
P: - プレーンフラグ(訳注:プレーン:plain。日本語にするなら「普通の」か「装飾の無い」とかが適切)。 コロンの後の値はデフォルトの設定(例えば、このフラグはオフである。)を示します。
m:--++ モードチェックフラグ。フラグの値はモードの選択により設定されます。 4つの符号は弱(weak)、標準(standard)、チェック(checks)、厳格(strict)のモードでの設定を示します。(例えば、このフラグは弱と標準モードではオフであり、チェックと厳格モードではオンです。)
shortcut ショートカットフラグ。このフラグは他のフラグが設定します。そのため、デフォルト値はありません。
フラグ名の中では、略称を使用することが出来ます。 図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 フラグ名の略称 |
未省略形式と省略形式はフラグ名の中で交換可能です。
例えば、 globsimpmodsnothing とglobalsimpliesmodifiesnothing は同じフラグを表します。 フラグ名の略称は、フラグの名前を過度に長くすること無く使用できるようにするために、 発音可能な記述名を許します。 (globsimpmodsnothingでさえ、長くて発音しにくいのを認めなければならないのだが)
フラグ名を読みやすくするために、 スペース、ダッシュ(-)、アンダースコア(_) をフラグ名の中に使用してもかまいません。 従って、globals-implies-modifies-nothingと glob_imps_modsnothing とglobsimpmodsnothingは同等です。
グローバルフラグはコマンドライン内、あるいは オプションファイルの中で設定することが出来ますが、 定式化されたコメントを使用して局所的に設定することは出来ません。 これらのフラグはオンラインヘルプ、初期化ファイル、プリプロセッサフラグ ライブラリ、そして、出力を制御します。
オンラインヘルプはSplintの操作とフラグ のドキュメントを提供しています。 ヘルプフラグが使用された場合、Splintはチェックを行いません。 ヘルプフラグは-あるいは、 + が前に付く場合があります。
help
help <topic>
help <flag>
warn-flags
P: + warn-rc
初期化ファイルを読み込んで問題があった。
P: + bad-flag
フラグが正しく無い方法で認識されていない、あるいは、使用されていません。
P: + fileextensions
コマンドラインでファイルが認識されていない拡張子を持つ時に警告します。
これらのフラグはSplintによって使用される ディレクトリとファイルを制御します。 それらはコマンドラインから、あるいはオプションファイル内にて使用することが出来ますが、 ソースコード内で制御コメントとして使用することは出来ません。 指摘のない限り、前に付く-あるいは+ は同じ意味を持ちます。
tmpdir <directory>
I<directory>
S<directory>
larchpath <path>
lclimportdir <directory>
f <file>
i <file>
nof
sys-dirs
これらのフラグはプリプロセッサ定数を定義したり、定義を解除したりするために 使用します。-I<directory>フラグもまた、C言語プリプロセッサに渡されます。 D<initializer>
U<initializer>
P: + unrecogdirective
プリプロセッサディレクティブは認識されません。
P: + preproc
プリプロセス時のエラー。
これらのフラグはライブラリの作成と使用を制御します。
dump <file>
load <file>
デフォルトでは-loadフラグがユーザライブラリを読み込むために 使用されなかった場合、標準のライブラリが読み込まれます。 もし、ユーザライブラリが読み込まれなかった場合、以下のフラグの1つを 異なる標準ライブラリを選択するために使用することが可能です。 説明されているライブラリを読み込むためには、フラグの前に +をつけて下さい (あるいは、no-libを使用してライブラリが読み込まれないようにしてください)。 提供されているライブラリについてはSection 14.1を参照してください。
no-lib
ansi-lib
strict-lib
posix-lib
posix-strict-lib
unix-lib
unix-strict-lib
which-lib
P: + newdecl
読み込まれたライブラリありは以前のファイルの中で宣言されていない新しい宣言が存在します。(ライブラリに対する一貫性をチェックするためにこのフラグを使用してください)
P: + impconj
全ての代替型を暗黙的に作成します(システムライブラリを作るのに便利です)。
これらのフラグは何の追加情報をSplintが出力するかを 制御します。+<flag>を設定すると、 説明されている情報が出力され、-<flag>を設定すると、それが抑制されます。 デフォルトでは、これらの全てのフラグはオフです。
use-stderr
show-summary
show-scan
show-all-uses
stats
time-dist
quiet
iso-lib
warn-unix-lib
which-lib
limit <number>
message-stream <file>
message-stream-stdout
message-stream-stderr
warning-stream <file>
warning-stream-stdout
warning-stream-stderr
error-stream <file>
error-stream-stdout
error-stream-stderr
通常、Splintはエラーを報告しないことを期待します。 エラーが報告されていない場合、終了ステータスは成功(0)となり、 エラーが報告された場合は失敗となります。 フラグを期待された報告されたエラーの個数を設定するのに使用できます。 期待されたエラーを抑制するメカニズムのため、 これらのオプションは最終的な実際のプログラムのチェックに対して使用されるべきではありませんが、 makeを使用してのプログラムの開発時に便利です。
expect <number>
こららのフラグはメッセージがどのように出力されるかを制御します。 それらは、コマンドライン、オプションファイルの中、あるいはセマンティックコメント内で局所的に設定可能です。 line-lenとlimitフラグは+ と -のどちらが前についても同じ意味です。 その他のフラグに対しては、+は説明の内容の出力をオンにし、-はオフにします。 各フラグの左にあるのはそのフラグのデフォルト値です。
+ 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
ストリーム出力ファイルが存在するファイルを上書きするとき、警告を行い、終了します。
モード選択フラグはあらかじめ定義された値へモードチェックフラグを設定します。 それらは報告されるエラーの種類を制御する速くて大雑把な方法を提供します。 特定のチェックフラグはモード選択を上書きするために、モードフラグの後に設定してもかまいません。 モードフラグは、局所的に使用されますが、しかし、 モードの設定は特定のコマンドラインのフラグ設定を上書きするでしょう。 モードチェックフラグが設定された後、モードフラグが使用された場合、警告が発せられます。
これらは各モードが何をするのかの一般的な考え方を与えるための簡単な説明です。 各モードでの完全なフラグの設定を確認するには、splint -help modesを使用してください。 +あるいは-のいずれかが使用されている場合、 モードフラグは同じ効果を持ちます。
weak(弱)
standard(標準)
checks(チェック)
strict(厳格)
これらのフラグはSplintによって行われるチェックを制御します。 これらは構文上のコメントの使用により局所的に、コマンドラインから、あるいはオプションファイル内で 設定されます。いくつかのフラグは直接、特定の種類のメッセージが報告されるかどうかを制御します。 +がフラグの前に付く場合は、 報告をオンにし、-がフラグの前に付く場合は 報告をオフにします。 他のフラグは、実表現へのアクセスなどを制御し、(特定の種類のエラーを防ぐため)型を同等にして、 (アノテーションが暗黙である)デフォルト値を決定することによって、直接のチェック 制御をより少なくします。 これらのフラグに対して、+の効果が 記載され、そして、-の効果はその反対 (あるいは、明確な反対が存在しない場合には、明示的に説明される)です。 このSectionの構成はSection 2-14を反映しています。
shortcut null
m:-+++ nullderef
m:-+++ nullpass
m:-+++ nullret
m:-+++ nullstate
m:-+++ nullassign
m:-+++ usedef
m:---- impouts
m:-+++ compdef
m:-+++ uniondef
m:-+++ mustdefine
P:+ fullinitblock
P:+ initallelments
P:+ initsize
m:-+++ incondefs
m:-+++ functionderef
m:--++ redundantsharequal
m:-+++ misplacedsharequal
P: + type
P: + string-literal-too-long
m: -+++ string-literal-no-room
m: ++++ string-literal-no-room-final-null
m: --++ string-literal-smaller
m: --++ enum-members
これらのフラグは真偽値を表現するために使用される型の名前と、 Boolean型が抽象型かどうかを制御します。
P: - bool
P: bool booltype <name>
P:FALSE boolfalse <name>
P: TRUE booltrue <name>
P: + likelybool
m:--++ pred-bool-ptr
m:-+++ pred-bool-int
m:++++ pred-bool-others
shortcut pred-bool
P: + pred-assign
m:---+ ptr-arith
m: --++ nullptrarith
m: ++-- boolops
m:++-- ptr-negate
m:---+ bitwise-signed
m: ---+ shiftimplementation
m: -+++ shiftnegative
m:-+++ shift-signed
m:---+ strict-ops
m:---+ sizeof-type
これらのフラグは配列型の仮引数の文法についての混乱によって発生する一般的なエラーの報告を制御します。
P: + sizeof-formal-array
P: + fixed-formal-array
P: - formal-array
P: + format-code
P: + format-type
P: + format-const
P: + main-type
m:-+++ bool-compare
m:-+++ real-compare
m:-+++ ptr-compare
m:-+++ unsigned-compare
m: +--- void-abstract
P: + cast-fcn-ptr
m:+--- forward-decl
m:-+++ imp-type
P: + incomplete-type
m:+--- char-index
m:---- enum-index
m:+--- bool-int
m:+--- char-int
m:+--- charunsignedchar
m:++-- enum-int
m:+--- float-double
m:---- ignore-quals
m:++-- relax-quals
m:---- ignore-signs
P: - long-integral
m:+--- long-unsigned-integral
P: - match-any-integral
P: - long-unsigned-unsigned-integral
m:+--- long-signed-integral
P: + num-literal
P: - char-int-literal
P: + zero-ptr
P: + zero-bool
P: - relax-types
m: +--- shortint
P: + abstract
P: - imp-abstract
m:-+++ mut-rep
P: + access-module
P: + access-file
P: + access-czech
P: - access-slovak
P: - access-czechoslovak
shortcut access-all
メモリ管理エラーの報告は設定しているチェックフラグ、暗黙のアノテーションとコードアノテーションによって制御されます。
m:-+++ use-released
m:---+ strict-use-released
m:-+++ branch-state
m:---+ strict-branch-state
m:--++ dep-arrays
m:-+++ must-free
m:-+++ mustfreefresh
m:-+++ mustfreeonly
shortcut memchecks
m:-+++ comp-destroy
m:---+ strict-destroy
矛盾している方法により、(代入、引数渡し、戻り値による返しによって) 記憶領域が転送された場合、転送エラー(transfer error)が報告されます。
shortcut mem-trans
m:-+++ only-trans
m:-+++ ownedtrans
m:-+++ fresh-trans
m:-+++ shared-trans
m:-+++ dependent-trans
m:-+++ temp-trans
m:-+++ kept-trans
m:-+++ keep-trans
m:-+++ refcount-trans
m:-+++ newref-trans
m:-+++ immediate-trans
m:-+++ static-trans
m:-+++ expose-trans
m:-+++ observer-trans
m:-+++ unqualified-trans
m:--++ only-unq-global-trans
m:--++ static-init-trans
m:--++ unqualified-init-trans
m:-+++ comp-mem-pass
m:++++ stack-ref
shortcut all-imp-only
P: + glob-imp-only
P: + param-imp-temp
P: + ret-imp-only
P: + struct-imp-only
shortcut code-imp-only
m:-+++ mem-imp
m:---- pass-unknown
m:-+++ alias-unique
m:-+++ may-alias-unique
m:-+++ must-not-alias
m:--++ ret-alias
shortcut rep-expose
m:--++ assign-expose
m:--++ cast-expose
m:--++ ret-expose
P: + mod-observer
m:---+ mod-observer-uncon
m:--++ read-only-trans
m:-+++ read-only-strings
P: + modifies
m:--++ must-mod
shortcut mod-uncon
m:---+ mod-nomods
m:---+ mod-uncon-nomods
m:---+ mod-internal-strict
m:---+ mod-file-sys
グローバルとファイル静的変数の 使用と変更を伴うエラーは、フラグの設定、グローバル変数が宣言された場所のアノテーション、 と、グローバルが使用されている関数がグローバル句と共に宣言されているかどうかに依存します。
P: + globs
m:++++ glob-use
m:---+ glob-noglobs
m:---+ internal-globs
m:---+ internal-globs-noglobs
m:-+++ glob-state
m:--++ all-globs
m:++++ check-strict-globs
m:-+++ mod-globs
m:---+ mod-globs-unchecked
m:---+ mod-globs-nomods
m:---+ mod-strict-globs-nomods
m:---+ warn-missing-globs
m:---+ warn-missing-globs-noglobs
m:--++ globs-imp-mods-nothing
m:---- mods-imp-noglobs
m:---- imp-checked-globs
m:---- imp-checked-statics
m:---- imp-checkmod-globs
m:---- imp-checkmod-statics
m:---+ imp-checkedstrict-globs
m:---+ imp-checkedstrict-statics
m:--++ imp-checkmod-internals
m:-+++
shortcut glob-alias
m:-+++ checkstrict-glob-alias
m:-+++ checked-glob-alias
m:-+++ checkmod-glob-alias
m:--++ unchecked-glob-alias
m:-+++ incon-defs
m:-+++ incon-defs-lib
m:---- overload
m:-+++ match-fields
これらのフラグはマクロ定義と呼び出しの 展開とチェックを制御します。
これらのフラグはどのマクロが関数あるいは定数と としてチェックされるのか、プリプロセッサ時にどのように展開されるのかを 制御します。/*@notfunction@*/で始まる マクロはこれらのフラグの設定に関係なく決して展開されることはありません。 これらのフラグはソースファイル制御コメントの中で使用されてもかまいません。
P: - fcn-macros
P: - const-macros
shortcut all-macros
P: - lib-macros
これらのフラグは何のエラーがマクロ定義内で報告されるかを 制御します。
m:-+++ macro-stmt
m:-+++ macro-return
m:-+++ macro-assign
m:-+++ macro-parens
m:---+ macro-empty
m:-+++ macro-redef
m:-+++ macro-unrecog
m:++++ macro-match-name
shortcut macro-decl
m:-+++ macro-fcn-decl
m:-+++ macro-const-decl
P: + next-line-macros
これらのフラグはチェックされた関数マクロの呼び出しと関数の呼び出しで 一貫性の無い副作用を持つ引数に対して報告するエラーを制御します。
m:-+++ sef-params
m:--++ sef-uncon
P: + iterbalance
P: + iteryield
P: - has-yield
P: + name-checks
shortcut czech
P: + access-czech
P: - czech-fcns
P: - czech-vars
P: - czech-macros
P: - czech-consts
P: - czech-types
shortcut slovak
P: - access-slovak
P: - slovak-fcns
P: - slovak-macros
P: - slovak-vars
P: - slovak-consts
P: - slovak-types
shortcut czechoslovak
P: - access-czechoslovak
P: - czechoslovak-fcns
P: - czechoslovak-macros
P: - czechoslovak-vars
P: - czechoslovak-consts
P: - czechoslovak-types
macro-var-prefix <prefix string>
P: + macro-var-prefix-exclude
tag-prefix <prefix string>
P: - tag-prefix-exclude
enum-prefix <prefix string>
P: - enum-prefix-exclude
file-static-prefix <prefix string>
P: - file-static-prefix-exclude
global-prefix <prefix string>
P: - global-prefix-exclude
type-prefix <prefix string>
P: - type-prefix-exclude
external-prefix <prefix string>
P: - external-prefix-exclude
local-prefix <prefix string>
P: - local-prefix-exclude
unchecked-macro-prefix <prefix string>
P: - unchecked-macro-prefix-exclude
const-prefix <prefix string>
P: - const-prefix-exclude
iter-prefix <prefix string>
P: - iter-prefix-exclude
proto-param-prefix <prefix string>
P: - proto-param-prefix-exclude
m:--++ proto-param-name
m:---+ proto-param-match
m:-+++ shadow
m:--++ ansi-reserved
m:---+ ansi-reserved-internal
m:--++ iso-reserved
m:---+ iso-reserved-internal
m:--++ cpp-names
P: - distinct-external-names
P: 6 external-name-len <number>
P: - external-name-case-insensitive
m:---- distinct-internal-names
P: 31 internal-name-len <number>
P: - internal-name-case-insensitive
P: - internal-name-lookalike
m:-+++ eval-order
m:---+ eval-order-uncon
m:-+++ inf-loops
m:--++ inf-loops-uncon
m:---+ elseif-complete
m:-+++ case-break
m:-+++ first-case
m:-+++ Duplicate-case
m:-+++ miss-case
P+ emptyreturn
P+ alwaysexits
shortcut loop-exec
P- for-loop-exec
P- while-loop-exec
P- iter-loop-exec
P+ obvious-loop-exec
shortcut deep-break
m:--++ loop-loop-break
m:--++ switch-loop-break
m:---+ loop-switch-break
m:---+ switch-switch-break
m:---+ loop-loop-continue
shortcut all-empty
shortcut all-block
m:--++ while-empty
m:---+ while-block
m:---+ for-empty
m:---+ for-block
m:++++ if-empty
m:---+ ifblock
m:-+++ unreachable
m:-+++ noeffect
m:---+ noeffect-uncon
m:-+++ noret
エラーが戻り値を使用しないで呼び出している関数に対して報告される際に これらのフラグが制御します。 voidを返す関数呼び出しに落とすか、 /*@alt void@*/を返すように呼び出された関数を宣言してください。
m:-+++ ret-val-bool
m:-+++ ret-val-int
m:++++ ret-val-other
shortcut ret-val
shortcut bounds
m:---- boundsread
m:---- boundswrite
shortcut likelybounds
m:---- likelyboundsread
m:---- likelyboundswrite
m:---- fcnpost
m:---- redundantconstraints
m:---- checkpost
P- showconstraintparens
P+ showconstraintlocation
以下のフラグは主にSplintの開発者にとって興味のあるものです。デフォルト値は通常の使用で十分です。 これらは完全を期すために含まれています。
P- debugfcnconstraint
P- implictconstraints
P- orconstraint
P- mts <filename>
m:++++ statetransfer
m:++++ statemerge
決して使用されない宣言に対してエラーが報告される際、これらのフラグが制御します。 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
m:--++ decl-undef
shortcut partial
m:---+ export-local
m:--++ export-header
m:--++ export-header-var
P: + unrecog
P: + sys-unrecog
P: - repeat-unrecog
P: + redef
m:--++ redecl
m:-+++ nested-extern
m:--++ noparams
m:---+ old-style
m:-+++ exit-arg
P: + use-varargs
ANSI規格には準拠するコンパイラがサポートしなければならない最小値に制限があります。 特定のコンパイラがこれらの制限を越えていない場合であろうと、 他のコンパイラでプログラムを安全にコンパイルするために、プログラムがそれらを超えていない ことを確認することには価値があります。 さらに、コード内で制限を越えていると問題がある可能性があります (例えば、ネストの深さの上限を超えた場合、それは複雑すぎです)。 それは、コンパイラに関係なく修正をすべきです。 Splintは以下の制限をチェックします。 各制限に対して、最大値がコマンドラインから(あるいは局所的に定型化されたコメントを使用して) 設定されます。 下限値はISO C99の仕様のため増えました。 iso99-limitsフラグが使用された場合、 制限はISO C99準拠のコンパイラの最小値でチェックされます。 ansi89-limitsフラグが使用された場合、 全ての制限はANSI C89準拠のコンパイラの最小値でチェックされます。
shortcut ansi89-limits
shortcut iso99-limits
m:---+ control-nest-depth <number>
m:---+ string-literal-len <number>
m:---+ num-struct-fields <number>
m:---+ num-enum-members <number>
m:--++ include-nest <number>
P: + skip-ansi-headers
P: + skip-iso-headers
P: + skip-posix-headers
P: + warn-posix-headers
P: + warn-unix-headers
P: - skip-sys-headers
P: + sys-dir-expand-macros
m:---+ sys-dir-errors
P:+ warn-sys-files
global: - single-include
global: - never-include
global: - case-insensitive-filenames
これらのフラグは構文上のコメントがどのように解釈されるかを制御します。
P: @ comment-char <char>
P: - noaccess
P: - nocomments
P: + sup-counts
P: + lint-comments
m:-+++ warn-lint-comments
P: + unrecog-comments
P: + unrecog-flag-comments
P: + annotationerror
P: + commenterror
P: - continue-comment
P: + nest-comment
P: - slashslashcomment
P: + duplicate-quals
P: + gnu-extensions
P: + syntax
P: - try-to-recover
m: -+++ bufferoverflow
m: ++++ bufferoverflowhigh
m: --++ implementationoptional
m: --++ multithreaded
m: --++ portability
m: --++ superuser
m: ---+ toctou
m: ---- unixstandard
P: - its4mostrisky
P: - its4veryrisky
P: - its4risky
P: - its4moderate
P: - its4low
P: 3 bugslimit
m: ---- debugfcnconstraint
P: - grammar
P: - keep
P: - nopp
P: - showsourceloc
このドキュメントはSplint(英)のサイトを元に作成しました
[ページ情報]
更新日時: 2014-02-11 15:07:57, 更新者: daruma_kyo
[ライセンス]
クリエイティブ・コモンズ 2.1 表示-継承
[権限]
表示:無制限, 編集:ログインユーザ, 削除/設定:メンバー