<?xml version="1.0" encoding="UTF-8" ?><rdf:RDF 
  xmlns="http://purl.org/rss/1.0/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:atom="http://www.w3.org/2005/Atom"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xml:lang="ja">
  <channel rdf:about="http://w.atwiki.jp/splint/">
    <title>Splintをがんばって翻訳するウィキ</title>
    <link>http://w.atwiki.jp/splint/</link>
    <atom:link href="https://w.atwiki.jp/splint/rss10.xml" rel="self" type="application/rss+xml" />
    <atom:link rel="hub" href="https://pubsubhubbub.appspot.com" />
    <description>Splintをがんばって翻訳するウィキ</description>

    <dc:language>ja</dc:language>
    <dc:date>2009-03-27T19:04:17+09:00</dc:date>
    <utime>1238148257</utime>

    <items>
      <rdf:Seq>
                <rdf:li rdf:resource="https://w.atwiki.jp/splint/pages/19.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/splint/pages/2.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/splint/pages/18.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/splint/pages/17.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/splint/pages/16.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/splint/pages/1.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/splint/pages/15.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/splint/pages/12.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/splint/pages/14.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/splint/pages/3.html" />
              </rdf:Seq>
    </items>
	
		
    
  </channel>
    <item rdf:about="https://w.atwiki.jp/splint/pages/19.html">
    <title>1 Operation</title>
    <link>https://w.atwiki.jp/splint/pages/19.html</link>
    <description>
      1. Operation

Splint is invoked by listing files to be checked.  Initialization files, command line flags, and stylized comments may be used to customize checking globally and locally.

 

The best way to learn to use Splint, of course, is to actually use it (if you don’t already have Splint installed on your system, see Appendix A).  Before you read much further in this document, I recommend finding a small C program.  Then, try running:

splint *.c

For the most C programs, this will produce a large number of warnings.  To turn off reporting for some of the warnings, try:

splint -weak *.c

The -weak flag is a mode flag that sets many checking parameters to select weaker checking than is done in the default mode.  Other Splint flags will be introduced in the following sections; a complete list is given in Appendix B.


ファイルのリストをSplintに渡すことにより、チェックが行われます。
初期化ファイル、コマンドラインのフラグおよび、様式化されたコメントは、グローバルやローカルでチェックすることをカスタマイズするのに用いられるかもしれません。

もちろん、Splintを使うことを学ぶ最高の方法は、実際にSplintを使うことです。
（もし、あなたのシステム上に、Splintがインストールされていないならば、Appendix Ａを見てください）

あなたが本ドキュメントを読み終える前に、小さなCプログラムでSplintを起動することを推奨します。
splint *.c
ほとんどのCプログラムでは、多数の警告を出します。
一部のチェックを無効にするには、下記を試します。
splint -weak *.c

-weak は、デフォルトモードより弱いチェックで実施するためのモードフラグです。
他のフラグは以降のセクションで説明します。完全なフラグのリストは、Appendix Bにあります。    </description>
    <dc:date>2009-03-27T19:04:17+09:00</dc:date>
    <utime>1238148257</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/splint/pages/2.html">
    <title>メニュー</title>
    <link>https://w.atwiki.jp/splint/pages/2.html</link>
    <description>
      **メニュー
-[[Introduction]]
-[[About This Document]]
-[[1 Operation]]
-[[2 Null Dereferences]]
-3 Undefined Values
-4 Types
-5 Memory Management
-6 Sharing
-7 Function Interfaces
-8 Control Flow
-9 Buffer Sizes
-10 Extensible Checking
-11 Macros
-12 Naming Conventions
-13 Completeness
-14 Libraries and Header File Inclusion
-Appendix A Availability
-[[Appendix B Flags]]
-Appendix C Annotations
-Appendix D Specifications
-Appendix E Annotated Bibliography

-[[管理者へのお問い合わせ]]
----
**更新履歴
#recent(10)

&amp;link_editmenu(text=ここを編集)    </description>
    <dc:date>2009-03-27T19:02:56+09:00</dc:date>
    <utime>1238148176</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/splint/pages/18.html">
    <title>About This Document</title>
    <link>https://w.atwiki.jp/splint/pages/18.html</link>
    <description>
      &amp;bold(){About This Document}
&amp;bold(){このドキュメントについて}

This document is a guide to using Splint.
Section 1 explains how to run Splint, interpret messages and control checking.
Sections 2–13 describe particular checks done by Splint.
There are some minor dependencies between sections, but in general they can be read in any order.
Section 14 covers issues involving libraries and header file inclusion important for running Splint on large systems.

この文書は、Splintを利用するためのガイドです。
セクション1はSplintを動作させ、メッセージを理解し、チェックする方法を説明する。
セクション2-13は、Splintによって行われた特定のチェックについて記載します。
セクション間には、いくつかの重要でない依存性があります。しかし、一般には任意の順に読むことができます。
セクション14は、Splintを動作させることにより、大型システムにおいて、ライブラリおよび、ヘッダファイルに含まれる問題をカバーします。

This document does not describe technical details of the checking.
For technical background and analysis of Splint’s effectiveness in practice, see the papers available at http://www.splint.org.

このドキュメントは、チェックの技術的詳細については記述しません。
Splintの効果の技術的な背景と分析については、http://www.splint.org/にあるドキュメントを参照してください。    </description>
    <dc:date>2009-02-22T00:48:09+09:00</dc:date>
    <utime>1235231289</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/splint/pages/17.html">
    <title>Introduction</title>
    <link>https://w.atwiki.jp/splint/pages/17.html</link>
    <description>
      Splint is a tool for statically checking C programs for security vulnerabilities and programming mistakes.
Splint does many of the traditional lint checks including unused declarations, type inconsistencies, use before definition, unreachable code, ignored return values, execution paths with no return, likely infinite loops, and fall through cases.
More powerful checks are made possible by additional information given in source code annotations.
Annotations are stylized comments that document assumptions about functions, variables, parameters and types.
In addition to the checks specifically enabled by annotations, many of the traditional lint checks are improved by exploiting this additional information.

Splintは、Cプログラムに対し、セキュリティ脆弱さとプログラミングの誤りを静的にチェックするためのツールです。
Splintは、未使用の宣言、タイプの不一致、定義前の使用、到達できないコード、無視された戻り値、リターン無しの実行経路、無限ループと思われる箇所、異常になりそうな箇所など従来からのLintのチェックも含みます。
より強力なチェックは、ソースコードの注釈において与えられる情報によって可能になります。
注釈は、関数、変数、パラメータ、タイプについて、仮定を記録する定型化されたコメントです。
注釈によって有効となるチェックに加えて、従来のLintチェックはこの追加情報を利用することによって改善されます。


As more effort is put into annotating programs, better checking results.
A representational effort-benefit curve for using Splint is shown in Figure 1.
Splint is designed to be flexible and allow programmers to select appropriate points on the effort-benefit curve for particular projects.
As different checks are turned on and more information is given in code annotations the number of bugs that can be detected increases dramatically.

より多くの注釈をプログラムに入れることにより、よりよいチェック結果が得られます。Splintを使うための代表的な努力-利点カーブは、図1に示されます。
Splintは、柔軟で、プログラマーが特定のプロジェクトのために、努力-利点カーブで適当な点を選ぶことができるように設計されています。
異なる複数のチェックを有効にし、ソースコードに注釈を記載すると、見つけられるバグの数は劇的に増加します。    </description>
    <dc:date>2009-02-19T12:54:09+09:00</dc:date>
    <utime>1235015649</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/splint/pages/16.html">
    <title>2 Null Dereferences</title>
    <link>https://w.atwiki.jp/splint/pages/16.html</link>
    <description>
      *Null Dereferences [#z04ec6fe]
A common cause of program failures is when a null pointer is dereferenced.~
Splint detects these errors by distinguishing possibly NULL pointers at interface boundaries.~
The null annotation is used to indicate that a pointer value may be NULL.~
A pointer declared with no null annotation, may not be NULL.~
If null checking is turned on (controlled by null), Splint will report an error when a possibly null pointer is passed as a parameter, returned as a result, or assigned to an external reference with no null qualifier.~
If a pointer is declared with the null annotation, the code must check that it is not NULL on all paths leading to a dereference of the pointer (or the pointer being returned or passed as a value with no null annotation).~
Dereferences of possibly null pointers may be protected by conditional statements or assertions (to see how assert is declared see Section 8.1) that check the pointer is not NULL.~
Consider two implementations of firstChar in Figure 2.~
For firstChar1, Splint reports an error since the pointer that is dereferenced is declared with a null annotation.~
For firstChar2, no error is reported since the true branch of the s == NULL if statement returns, so the dereference of s is only reached if s is not NULL.~

**Predicate Functions [#m1c11196]
**Notnull Annotations [#m2324e76]
**Relaxing Null Checking [#yec2169f]    </description>
    <dc:date>2008-12-16T20:31:50+09:00</dc:date>
    <utime>1229427110</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/splint/pages/1.html">
    <title>トップページ</title>
    <link>https://w.atwiki.jp/splint/pages/1.html</link>
    <description>
      *Splint日本語翻訳ウィキ へようこそ

-このウィキは、Splintのマニュアルをがんばって日本語に翻訳するページです。
-Splintを使おうと思ったけど、マニュアルが英語なので良くワカラナイので、翻訳してから使うことにしました。
-きっと、更新頻度は低いと思います。途中で更新が止まるかも、、、(^^;)

**ご意見、ご要望がある場合は？
お手数ですが、メールでお問い合わせください。

今まで来てくれた人：のべ &amp;counter(total) 人
今日、来てくれた人：のべ &amp;counter(today) 人    </description>
    <dc:date>2008-12-16T17:56:09+09:00</dc:date>
    <utime>1229417769</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/splint/pages/15.html">
    <title>Appendix B Flags</title>
    <link>https://w.atwiki.jp/splint/pages/15.html</link>
    <description>
      -[[Appendix B:Flags:Macros]]    </description>
    <dc:date>2008-12-12T20:34:11+09:00</dc:date>
    <utime>1229081651</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/splint/pages/12.html">
    <title>Appendix B:Flags:Macros</title>
    <link>https://w.atwiki.jp/splint/pages/12.html</link>
    <description>
      *Macros (Section 11)
These flags control expansion and checking of macro definitions and invocations.
「Macros」フラグは、拡張とマクロ定義や呼び出しのチェックを指定します。

**Macro Expansion マクロ展開
These flags control which macros are checked as functions or constants, and which are expanded inthe pre-processing phase.
Macros preceded by /*@notfunction@*/ are never expanded regardless
of these flag settings. These flags may be used in source-file control comments.
「Macro Expansion」フラグは、マクロのチェック方法を指定します。チェックする方法は、下記のいずれかより指定します。
・関数または、定数としてチェックする。
・プリプロセッシングで展開した後にチェックする。
但し、ソースファイル内に、/*@notfunction@*/が存在する場合、それ以降のマクロは、マクロ展開フラグの指定に関係なく、マクロを展開せずにチェックを実施します。

-&amp;bold(){【P: -】fcn-macros}
Macros defined with parameter lists are not expanded and are checked as functions.
引数（パラメータ）が定義されているマクロは、展開せずに関数としてチェックされます。
-&amp;bold(){【P: -】const-macros}
Macros defined without parameter lists are not expanded and are checked as constants.
引数（パラメータ）が定義されていないマクロは、展開せずに定数としてチェックされます。
-&amp;bold(){【shortcut】all-macros}
Sets fcn-macros and const-macros.
fcn-macros および、const-macrosを有効にします。 
-&amp;bold(){【P: -】lib-macros}
Macros defining identifiers declared in a loaded library are not expanded and are checked according to the library information.
ライブラリで宣言されている識別子を利用しているマクロは、展開せずにライブラリ情報にてチェックされます。 

**Macro Definitions マクロ定義
These flags control what errors are reported in macro definitions.
これらのフラグは、マクロ定義でおこなうチェックを指定します。

-&amp;bold(){【m:-+++】macro-stmt}
Macro definition is not syntactically equivalent to function.
This means if the macro is used as a statement (e.g., if (test) macro();) unexpected behavior may result.
One fix is to surround the macro body with do { … } while (FALSE).
マクロ定義が、機能するための構文として正しくありません。
このような方法でマクロ文を利用した場合、予期できない処理を実施する可能性があります。（例えば、if (test) macro();）
解決策の一つとして、マクロ文を囲む方法があります。（例えば、do { … } while (FALSE)）
-&amp;bold(){【m:-+++】macro-return}
The body of a macro declared as a function uses a return statement.
マクロ定義を関数のreturn文で使用しています。
This exhibits behavior that could not be implemented by a function.
これは、関数によって実行できなかった振舞いを示します。
-&amp;bold(){【m:-+++】macro-assign}
A macro parameter is used as the left side of an assignment expression.
マクロパラメータが、代入式の左側に割り当てられます。
-&amp;bold(){【m:-+++】macro-parens}
A macro parameter is used without parentheses (in potentially dangerous context).
マシン・パラメータが、括弧なしで使用されている。（潜在的に危険）
-&amp;bold(){【m:---+】macro-empty}
Macro definition of a function is empty.  
マクロ関数の定義は空です。
-&amp;bold(){【m:-+++】macro-redef}
Macro is redefined.  There is another macro defined with the same name.
マクロが再定義されている。別のマクロが、同じ名前で定義されている。
-&amp;bold(){【m:-+++】macro-unrecog}
An unrecognized identifier appears in a macro definition.
Since the identifier may be defined where the macro is used, this could be okay,
but Splint will not be able to check the unrecognized identifier appropriately.
マクロ定義で、認識されていない識別子が表示されます。
マクロが使われる場所で識別子が定義されている可能性があるので、問題では無いかも知れません。
しかし、Splintは適切に認められていない識別子をチェックすることができません。    </description>
    <dc:date>2008-12-12T20:32:28+09:00</dc:date>
    <utime>1229081548</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/splint/pages/14.html">
    <title>管理者へのお問い合わせ</title>
    <link>https://w.atwiki.jp/splint/pages/14.html</link>
    <description>
      #mailform()    </description>
    <dc:date>2008-12-12T19:07:50+09:00</dc:date>
    <utime>1229076470</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/splint/pages/3.html">
    <title>右メニュー</title>
    <link>https://w.atwiki.jp/splint/pages/3.html</link>
    <description>
      **更新履歴
#recent(20)


&amp;link_editmenu2(text=ここを編集)
    </description>
    <dc:date>2008-12-09T19:25:03+09:00</dc:date>
    <utime>1228818303</utime>
  </item>
  </rdf:RDF>
