diff --git a/gui/cppcheck_ja.ts b/gui/cppcheck_ja.ts index cb8536e62..66e5585f2 100644 --- a/gui/cppcheck_ja.ts +++ b/gui/cppcheck_ja.ts @@ -22,7 +22,7 @@ Copyright © 2007-2018 Cppcheck team. Copyright © 2007-2017 Cppcheck team. - + Copyright © 2007-2018 Cppcheck team. @@ -167,7 +167,7 @@ Parameters: -l(line) (file) Save as - + 別名で保存する @@ -250,27 +250,27 @@ Parameters: -l(line) (file) Cppcheck - Cppcheck + Cppcheck Can not open file %1. - + ファイルが見つかりません %1。 Failed to load %1. %2. - + 読み込みに失敗しました(%1.%2)。 Can not save file %1. - + ファイルが保存できません %1。 Save the library as - + このライブラリに名前をつけて保存する @@ -288,17 +288,18 @@ Parameters: -l(line) (file) <p>Example:</p> <pre> memcmp(x, y, i == 123); // last argument should not have a bool value</pre> </body></html> - <html><head/><body> -<p>例えば、比較からの返り値または '!' 演算子からの返り値等でbool値は許可されていますか?</p> -<p>典型的には、引数がポインタやサイズの場合にこれをセットします。</p> + <html><head/><body> +<p>ブール値は許可されていますか? 例えば、比較の結果または '!' 演算子</p> +<p>典型的に引数がポインタやサイズを表す場合、これを設定します。</p> <p>例:</p> -<pre> memcmp(x, y, i == 123); // 最後の引数はbool値を許可しない </pre> +<pre> memcmp(x, y, i == 123); // 最後の引数は、ブール型であってはならない </body></html> Not bool - 非bool値 + 非ブール型 + 非bool値 @@ -394,7 +395,7 @@ Parameters: -l(line) (file) Valid values - + 妥当な値 @@ -477,7 +478,7 @@ Parameters: -l(line) (file) &C standard C standard - C標準 + &C標準 @@ -519,7 +520,7 @@ Parameters: -l(line) (file) Analyze files Check files - ファイルをチェック + ファイルをチェックする @@ -536,7 +537,7 @@ Parameters: -l(line) (file) Analyze directory Check directory - ディレクトリをチェック + ディレクトリをチェックする @@ -567,7 +568,7 @@ Parameters: -l(line) (file) Stop analysis Stop checking - チェックを停止する + チェックを停止する @@ -646,17 +647,17 @@ Parameters: -l(line) (file) Show Cppcheck results - + Cppcheck結果を表示する Clang - + Clang Show Clang results - + Clangの結果を表示する @@ -802,7 +803,8 @@ Parameters: -l(line) (file) A&nalyze - + A&チェック +A&チェック @@ -813,22 +815,22 @@ Parameters: -l(line) (file) &Reanalyze modified files &Recheck modified files - 変更のあったファイルを再チェック(&R) + 変更ありファイルを再チェック(&R) Reanal&yze all files - + 全ファイル再チェック(&y) Style war&nings - + スタイル警告(&n) E&rrors - + エラー(&E) @@ -898,7 +900,7 @@ Parameters: -l(line) (file) Sh&ow Scratchpad... - + スクラッチパッドを表示(&o)... @@ -918,82 +920,82 @@ Parameters: -l(line) (file) &Warnings - + 警告(&W) Per&formance warnings - + パフォーマンス警告(&f) &Information - + 情報(&I) &Portability - + 移植可能性(&P) P&latforms - + プラットフォーム(&l) C++&11 - + C++11(&1) C&99 - + C99(&9) &Posix - + Posix(&P) C&11 - + C11(&1) &C89 - + C89(&C) &C++03 - + C++03(&C) &Library Editor... - + ライブラリエディタ(&L)... &Auto-detect language - + 自動言語検出(&A) &Enforce C++ - + C++ 強制(&E) E&nforce C - + C 強制(&n) C++14 - C++14 + C++14 @@ -1020,7 +1022,7 @@ This is probably because the settings were changed between the Cppcheck versions C/C++ Source, Compile database, Visual Studio (%1 %2 *.sln *.vcxproj) - + C/C++ソースコード、プロジェクトファイル、Visual Studioソリューション(%1 %2 *.sln *.vcxproj) Select directory to check @@ -1042,7 +1044,7 @@ This is probably because the settings were changed between the Cppcheck versions Select configuration - + コンフィグレーションの選択 @@ -1106,12 +1108,12 @@ Do you want to proceed checking without using any of these project files? Unknown element - + 不明な要素 Unknown issue - + 不明な課題 @@ -1131,7 +1133,7 @@ Do you want to proceed checking without using any of these project files? Failed to load %1. Your Cppcheck installation is broken. You can use --data-dir=<directory> at the command line to specify where this file is located. Please note that --data-dir is supposed to be used by installation scripts and therefore the GUI does not start when it is used, all that happens is that the setting is configured. - + %1のロードに失敗しました。あなたの Cppcheck は正しくインストールされていません。あなたは --data-dir=<directory> コマンドラインオプションでこのファイルの場所を指定してできます。ただし、この --data-dir はインストールスクリプトによってサポートされており、GUI版ではサポートされていません。全ての設定は調整済みでなければなりません。 @@ -1224,56 +1226,60 @@ Do you want to stop the checking and exit Cppcheck? No suitable files found to analyze! - + チェック対象のファイルがみつかりません! Select files to analyze - + チェック対象のファイルを選択 Select directory to analyze - + チェックするディレクトリを選択してください Select the configuration that will be analyzed - + チェックの設定を選択 Found project files from the directory. Do you want to proceed analysis without using any of these project files? - + ディレクトリ内にプロジェクトファイルがありました。 + +みつかったプロジェクトファイルを使用せずにチェックしますか? Analyzer is running. Do you want to stop the analysis and exit Cppcheck? - + チェック中です。 + +チェックを中断して、Cppcheckを終了しますか? XML files (*.xml);;Text files (*.txt);;CSV files (*.csv) - + XML ファイル (*.xml);;テキストファイル (*.txt);;CSVファイル (*.csv) Build dir '%1' does not exist, create it? - + ビルドディレクトリ'%1'がありません。作成しますか? Failed to import '%1', analysis is stopped - + '%1'のインポートに失敗しました。(チェック中断) Project files (*.cppcheck) - + プロジェクトファイル (*.cppcheck) @@ -1325,7 +1331,7 @@ Options: -d <directory> Specify the directory that was checked to generate the results xml specified with -l -v, --version Show program version --data-dir=<directory> Specify directory where GUI datafiles are located (translations, cfg) - Cppcheck GUI. + Cppcheck GUI. シンタックス: cppcheck-gui [OPTIONS] [files または paths] @@ -1336,7 +1342,7 @@ Options: -l <file> 指定の、結果XMLファイルを開く -d <directory> フォルダを指定してチェックする。これは -l オプションで 指定した、結果XMLファイルを生成する。 -v, --version バージョンを表示する。 - --data-dir=<directory> GUI のデータファイルのあるディレクトリを指定する。(翻訳やcfg) + --data-dir=<directory> GUI のデータファイル(翻訳やcfg)のあるディレクトリを指定する。 @@ -1353,7 +1359,7 @@ Options: Native - + ネイティブ @@ -1411,12 +1417,12 @@ Options: Paths and Defines - + パスと定義 Import Project (Visual studio / compile database) - + プロジェクトのインポート(Visual studio / compile database) @@ -1441,17 +1447,17 @@ Options: ... - + ... <html><head/><body><p>You have a choice:</p><p> * Analyze all Debug and Release configurations</p><p> * Only analyze the first matching Debug configuration</p><p><br/></p></body></html> - + <html><head/><body><p>選択済み:</p><p> * 全Debug と Release設定をチェックする</p><p> * 最初にマッチした Debug 設定のみチェックする</p><p><br/></p></body></html> Analyze all Visual Studio configurations - + Visual Studioの全ての設定をチェックする @@ -1484,7 +1490,7 @@ Options: Include Paths: - + インクルードパス: Includes @@ -1507,22 +1513,22 @@ Options: Root path: - + ルートパス: Warning tags (separated by semicolon) - + 警告タグ(セミコロン区切り) Cppcheck build dir (whole program analysis, incremental analysis, statistics, etc) - + Cppcheck ビルドディレクトリ (全プログラムチェック, 差分チェック, 統計等) Libraries - + ライブラリ @@ -1547,47 +1553,47 @@ Options: Addons - + アドオン Y2038 - + Y2038 Thread safety - + スレッドセーフ Coding standards - + コーディング標準 Cert - + CERT Extra Tools - + エクストラツール It is common best practice to use several tools. - + 複数ツールの併用はよい結果を生みます。 Clang analyzer - + Clang Analyzer Clang-tidy - + Clang-tidy @@ -1605,12 +1611,12 @@ Options: Select Cppcheck build dir - + Cppcheckビルドディレクトリ Visual Studio (*.sln *.vcxproj);;Compile database (compile_commands.json) - + Visual Studio (*.sln *.vcxproj);;コンパイルデータベース (compile_commands.json) @@ -1625,12 +1631,12 @@ Options: Clang-tidy (not found) - + Clang-tidy (みつかりません) Import Project - + プロジェクトのインポート @@ -1691,12 +1697,12 @@ Options: line %1: Unhandled element %2 - + 行 %1: 扱われていない要素(Unhandled element) %2 (Not found) - + (みつかりません) @@ -1762,12 +1768,12 @@ Options: note - + 注意 Recheck - + 再チェック @@ -1787,7 +1793,7 @@ Options: Copy message id - + メッセージidをコピー @@ -1802,7 +1808,7 @@ Options: Suppress selected id(s) - + 選択したidを抑制 @@ -1813,12 +1819,12 @@ Options: Tag - + タグ No tag - + タグなし @@ -1832,7 +1838,9 @@ Options: Configure the editor application for Cppcheck in preferences/Applications. Configure the text file viewer program in Cppcheck preferences/Applications. - メニューの「編集」→「設定」からテキストファイルを表示するアプリケーションを設定してください。 + エディタアプリが設定されていません。 + +Cppcheckの「設定」からテキストファイルを編集するアプリケーションを設定してください。 @@ -1875,7 +1883,7 @@ Please select the directory where file is located. Id - ID + Id @@ -1885,7 +1893,7 @@ Please select the directory where file is located. Since date - + 日付 @@ -1928,12 +1936,12 @@ Please select the directory where file is located. Analysis Log - + チェックログ Warning Details - + 警告の詳細 @@ -1988,7 +1996,7 @@ To toggle what kind of errors are shown, open view menu. XML format version 1 is no longer supported. - + XML フォーマットバージョン 1 はもうサポートされていません。 @@ -2003,27 +2011,27 @@ To toggle what kind of errors are shown, open view menu. First included by - + は次のものが最初にインクルードしました Id - ID + ID Clear Log - + ログの消去 Copy this Log entry - + このログ項目をコピー Copy complete Log - + ログ全体をコピー @@ -2031,7 +2039,7 @@ To toggle what kind of errors are shown, open view menu. Scratchpad - + スクラッチパッド @@ -2079,7 +2087,7 @@ To toggle what kind of errors are shown, open view menu. Force checking all #ifdef configurations Check all #ifdef configurations - すべての #ifdef をチェックする + すべての #ifdef をチェックする @@ -2109,7 +2117,7 @@ To toggle what kind of errors are shown, open view menu. Show statistics on check completion - + チェック完了時に統計情報を表示する @@ -2119,38 +2127,38 @@ To toggle what kind of errors are shown, open view menu. Addons - + アドオン Python binary (leave this empty to use python in the PATH) - + Pythonインタプリタの場所(空白の場合システムのPATHから検索) ... - + ... Clang - + Clang Clang path (leave empty to use system PATH) - + Clangの場所(空白の場合システムのPATHから検索) Visual Studio headers - + Visual Studioのヘッダ <html><head/><body><p>Paths to Visual Studio headers, separated by semicolon ';'.</p><p>You can open a Visual Studio command prompt, write &quot;SET INCLUDE&quot;. Then copy/paste the paths.</p></body></html> - + <html><head/><body><p>Visual Studioのヘッダーファイル(セミコロン区切り';')。</p><p>Visual Studio コマンドプロンプトを開き、 &quot;SET INCLUDE&quot;. と入力後、そのパスをコピーペーストしてください。</p></body></html> Paths @@ -2229,7 +2237,7 @@ To toggle what kind of errors are shown, open view menu. [Default] - + [デフォルト] @@ -2239,12 +2247,12 @@ To toggle what kind of errors are shown, open view menu. Select python binary - + pythonの場所の選択 Select clang path - + clangのパスの選択 Select include directory @@ -2341,12 +2349,12 @@ To toggle what kind of errors are shown, open view menu. History - + ヒストリー File: - + ファイル: @@ -2356,7 +2364,7 @@ To toggle what kind of errors are shown, open view menu. Pdf Export - + PDF エクスポート @@ -2411,7 +2419,7 @@ To toggle what kind of errors are shown, open view menu. Export PDF - + PDF エクスポート @@ -2426,12 +2434,12 @@ To toggle what kind of errors are shown, open view menu. Include paths - + インクルードパス Defines - + 定義(define) @@ -2457,18 +2465,18 @@ To toggle what kind of errors are shown, open view menu. File: - + ファイル: No cppcheck build dir - + cppcheckビルドディレクトリがありません Warnings - 警告 + 警告 diff --git a/man/manual-ja.docbook b/man/manual-ja.docbook index 646629d09..f7ee1eb03 100644 --- a/man/manual-ja.docbook +++ b/man/manual-ja.docbook @@ -2,9 +2,9 @@ - Cppcheck 1.73 dev + Cppcheck 1.82 - 2015-09-09 + 2018-01-21 @@ -30,11 +30,79 @@ Cppcheckに限界があることをご理解ください。Cppcheckの報告しているエラーに稀に間違いのあることがあります。また、Cppcheck が検出しないバグが残っていることもあります。 - ソフトウェアを注意深くテストすれば、Cppcheckを使うより、より多くのバグを検出することができるでしょう。ソフトウェアを注意深く実装すれば、Cppcheckを使うより、より多くのバグを検出することができるでしょう。しかし、あなたのソフトウェアを実装するときやテストするときに見逃したバグのいくつかを Cppcheckが検出できるでしょう。 + ソフトウェアを注意深くテストすれば、Cppcheckを使うより、より多くのバグを検出できるでしょう。ソフトウェアを注意深く実装すれば、Cppcheckを使うより、より多くのバグを検出できるでしょう。しかし、あなたのソフトウェアを実装するときやテストするときに見逃したバグのいくつかを Cppcheckが検出できるでしょう。 - はじめ方 + GUIでのはじめ方 + + GUIの起動 + +
+ 新しいプロジェクト(New Project) + + 新しプロジェクトのファイルの作成は必要ではありませんが、最初のステップに最適です。ファイル(File)と新しいプロジェクトファイル(New project file)を通じて学べます。 +
+ +
+ 新しいプロジェクト(New Project) - パス(Paths)と定義(Defines) + + あなたのプロジェクトはどのようなプロジェクトでしょうか。あなたのプロジェクトがVisual Studioのプロジェクトの場合、または(cmake/qbs/等の)コンパイルデータベースqが精製できる場合、あなたはプロジェクトをインポート(import)できます。 + + そうではない場合には、そのプロジェクトのパスと定義をマニュアルで調整します。次の図は、Visual Studio のプロジェクトファイルをインポートした場合のスクリーンショットです。 + + + + + + +
+ +
+ 新しいプロジェクト(New Project) - プロジェクト(Project) + + プロジェクトタブ(Project tab)では、ビルドディレクトリ(Cppcheck build dir)を設定しましょう。これはCppcheckが様々な分析する情報を保管するために使用します。プログラム全体の解析、インクリメンタル解析、統計などです。それぞれのプロジェクトは、それぞれのビルドディレクトリを持ちます。次のスクリーンショットはビルドディレクトリをcppcheck-build-dirと設定しています。このパスはプロジェクトファイルからの相対パスです。 + + あなたは、あなた使用する全てのライブラリーを選択すべきです。次のスクリーンショットではmicrosoft_sal と windowsライブラリーを選択しています。ライブラリーについてはこのマニュアルを参照してして下さい。 + + + + + + +
+ +
+ 新しいプロジェクト(New Project) - アドオン(Addons) + + ここでは 除外タブ(Exclude)と抑制タブ(Suppressions)をスキップします。これは結果をあとで微調整するために使います。 + + アドオンタブ(Addons)であなたは別の分析を追加できます。このアドオンにはpythonが必要です。 + + + + + + +
+ +
+ 解析(Analyze) + + ダイアログのOKボタンをクリックします。解析がすぐに始まります。 + + + + + + + + 全ての警告が有効になり、やや賑やかになります。あなたが注意しない様々な警告があり得ます。これは簡単に修正できます。メッセージを右クリックして、隠す(Hide)または抑制( Suppress)を選びます。メッセージの隠しは永久ではありません。これは次の解析でまた表示されます。メッセージの抑制は、永久です。抑制されたidはプロジェクトファイルに保存されるので、これらは二度と表示されません。 +
+
+ + + コマンドラインでの始め方
最初のテスト @@ -73,6 +141,20 @@ Checking path/file2.cpp... 2/2 files checked 100% done
+
+ マニュアルでファイルをチェックまたはプロジェクトファイルの使用 + + Cppcheckでは、ファイルやパスを指定する事でファイルチェックを指定できます。一方ででプロジェクトファイル(cmake/visual studio)を使用できます。 + + プロジェクトファイルの使用は早急に始められます、というのもあなたが設定してする項目が少なくなるからです。 + + マニュアルでのファイルチェックは、解析をより細かく制御できます。 + + どちらのアプローチが良い結果になるかはわかりません。両方の方法を試して下さい。両方のアプローチを使用するとより多くののバグを見つけられる結果が得られるかもしれません。 + + 以降の章でより詳細を説明します。 +
+
チェックからファイルやフォルダを除外する @@ -85,16 +167,10 @@ Checking path/file2.cpp... 第二の方法は、-iオプションと共に除外したいファイルやフォルダを指定することです。次のコマンドではsrc/c以下のファイルをチェックしません。 cppcheck -isrc/c src -
-
- インクルードパス指定 + このオプションは現在--projectオプションと同時に使用できません。また、このオプションが有効なのは、インプットディレクトリが提供するされたときです。複数のディレクトリを無視するためには、-iを複数回使用します。次のコマンドではsrc/b と src/c 以下のファイルをチェックしません。 - インクルードパスを追加するには-Iオプションに続けてパスを指定します。 - - Cppcheckのプリプロセッサは基本的に他のプリプロセッサと同様にインクルードを扱います。しかし、その他のプリプロセッサはヘッダファイルが見つからない場合に停止するのとは違って、cppcheckはただ単に、メッセージ情報を表示してソースコードの解析を続けます。 - - cppcheckは常にソースコード全体を確認する必要がないので、このような仕様になっています。実際に、全てのインクルードパスを与えないことを推奨しています。もちろん、クラスのメンバーの実装を確認した上でクラスの宣言をCppcheckでチェックするのは有用ではありますが、標準ライブラリのヘッダーをCppcheckに確認させるのは有用ではありません。というのは、チェックにかかる時間が長くなり、あまりよくない結果が表示されるからです。そのような場合、.cfg ファイル (後述します)によってcppcheckに関数や型の実装の情報を提供する方がよいでしょう。 + cppcheck -isrc/b -isrc/c
@@ -104,7 +180,7 @@ Checking path/file2.cpp... - error + error(エラー) バグが検出されたときに使用します。 @@ -112,7 +188,7 @@ Checking path/file2.cpp... - warning + warning(警告) 防衛的プログラミングでバグを避けるための提案です。 @@ -203,7 +279,7 @@ cppcheck --enable=all
- マルチスレッドチェック + マルチスレッドチェック オプションの-j を使用してスレッド数を指定することができます。例えば、4スレッドを使ってフォルダ以下の全てのファイルをチェックする場合は次のように実行します。 @@ -243,14 +319,67 @@ cppcheck --enable=all
+ + Project(プロジェクト) + + CMakeやVisual Studioを使っているとき、あなたは--projectを使ってプロジェクトを解析できます。 + + これでカンタンにチェックでき、結果も得られます。あなたに必要な設定項目はありません。しかしこれが最も良い結果を得る方法とは限りません。私たちは、このプロジェクトファイルを利用する方法と、--projectを利用しない方法を試してよいオプションを選ぶようにお勧めします。 + +
+ CMake + + Cppcheckはコンパイルデータベースを理解します。あなたはこれをCMakeで生成できます。 + + 例: + + $ cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON . + + compile_commands.jsonファイルが現在のディレクトリに生成されます。 + + それからCppcheckをこのように実行します。: + + $ cppcheck --project=compile_commands.json +
+ +
+ Visual Studio + + あなたは個々にのプロジェクトファイル(*.vcxproj)でCppcheckを実行できますし、ソルーション全体(*.sln)でも実行できます。 + + # run cppcheck on a whole solution +$ cppcheck --project=foobar.sln + +# run cppcheck on a individual project +$ cppcheck --project=foobar.vcxproj + + Visual Studio内でcppcheckを実行するための、Visual Studioプラグインもあります。 +
+
+ プリプロセッサの設定 - Cppcheckはデフォルトでプリプロセッサのデファインのコンパイルスイッチ設定の組み合わせを全てチェックします。(ただし、これらのうち #error を除く) + あなたが --projectを使用した場合、Cppcheckはプロジェクトファイルからプリプロセッサーの設定を読み取ります。 - これを変更するには -D を使います。また -D を使用した場合、cppcheckは与えられたコンパイルスイッチだけが有効でその他は設定されていないとしてチェックします。これは、コンパイラのように動作します。また、 --force--max-configs を使用すると、コンパイルスイッチの組み合わせの上限を上書きしてチェックすることができます。 + そうでなければ、あなたはインクルードパスやディレクティブを設定したくなるでしょう。 - # 全てのコンパイルスイッチの組み合わせをチェックする。 +
+ ディレクティブ + + ここに2つの設定があるファイルがあります(Aが定義された場合と定義されていない場合): + + #ifdef A + x = y; +#else + x = z; +#endif + + Cppcheckはデフォルトでプリプロセッサのデファインのコンパイルスイッチ設定の組み合わせを全てチェックします。(ただし、これらのうち #error を除く)そのため上のコードは、Aが定義された場合とAが定義されていない場合の両方を解析します。 + + これを変更するには -D を使います。また -D を使用した場合、cppcheckは与えられたコンパイルスイッチだけが有効でその他は設定されていないとしてチェックします。これは、コンパイラのように動作します。また、 --force--max-configs を使用すると、コンパイルスイッチの組み合わせの上限を上書きしてチェックすることができます。 + + # 全てのコンパイルスイッチの組み合わせをチェックする。 cppcheck file.c # Aのコンパイルスイッチが有効になっている場合の組み合わせをチェックする @@ -259,25 +388,34 @@ cppcheck -DA file.c # check all configurations when macro A is defined cppcheck -DA --force file.c - また、もう一つのオプションに-U があります。これはシンボルのundefとなります。使用例: + また、もう一つのオプションに-U があります。これはシンボルのundefとなります。使用例: - cppcheck -UX file.c + cppcheck -UX file.c - これはXが定義されていないことを意味します。Cppcheck は Xが定義されている組み合わせをチェックしません。 + これはXが定義されていないことを意味します。Cppcheck は Xが定義されている組み合わせをチェックしません。 +
+ +
+ インクルードパス指定 + + インクルードパスを追加するには-Iオプションに続けてパスを指定します。 + + Cppcheckのプリプロセッサは基本的に他のプリプロセッサと同様にインクルードを扱います。しかし、その他のプリプロセッサはヘッダファイルが見つからない場合に停止するのとは違って、cppcheckはただ単に、メッセージ情報を表示してソースコードの解析を続けます。 + + cppcheckは常にソースコード全体を確認する必要がないので、このような仕様になっています。実際に、全てのインクルードパスを与えないことを推奨しています。もちろん、クラスのメンバーの実装を確認した上でクラスの宣言をCppcheckでチェックするのは有用ではありますが、標準ライブラリのヘッダーをCppcheckに確認させるのは有用ではありません。というのは、チェックにかかる時間が長くなり、あまりよくない結果が表示されるからです。そのような場合、.cfg ファイル (後述します)によってcppcheckに関数や型の実装の情報を提供する方がよいでしょう。 +
XML出力 - Cppcheckは出力をXML形式に変更できます。XML出力には古いXML 形式(version 1) と新しいXML 形式(version 2)があります。可能であれば、新しい形式をご利用ください。 + Cppcheckは出力をXML形式に変更できます。--xml オプションでフォーマットを指定します。 - 古い形式は後方互換性のためだけに残してあります。現在、変更の予定はありませんが、いつかは古い形式をサポートしなくなります。--xml オプションでフォーマットを指定します。 + ファイルをチェックし、XML形式で出力するコマンドのサンプルです。: - 新しい形式は古い形式にあったいくつかの問題を解消しています。新しい形式も、おそらくいつかは、新しい属性や要素を追加するなど変更されるかもしれません。Cppcheckでファイルをチェックし、新しいXML形式で出力するコマンドのサンプルです。: + cppcheck --xml file1.cpp - cppcheck --xml-version=2 file1.cpp - - ここにバージョン2の出力の例を挙げます。: + これが出力例です。: <?xml version="1.0" encoding="UTF-8"?> <results version="2"> @@ -285,7 +423,7 @@ cppcheck -DA --force file.c <errors> <error id="someError" severity="error" msg="short error text" verbose="long error text" inconclusive="true" cwe="312"> - <location file="file.c" line="1"/> + <location file0="file.c" file="file.h" line="1"/> </error> </errors> </results> @@ -362,6 +500,14 @@ cppcheck -DA --force file.c + + file0 + + + ソースファイルの名前(オプション) + + + line @@ -463,7 +609,7 @@ gui/test.cpp,16,error,mismatchAllocDealloc,Mismatching allocation and deallocati severity - メッセージの種類、レベル + メッセージの種類、レベル @@ -471,6 +617,57 @@ gui/test.cpp,16,error,mismatchAllocDealloc,Mismatching allocation and deallocati その他エスケープシーケンス \b (バックスペース), \n (改行), \r (改ページ) , \t (タブ) がサポートされています。 + + Misra + + CppcheckはMISRA C 2012 向けのチェッカのアドオンを持っています。 + + MISRAルールテキストの公開は禁止されています。そのためMISRAルールテキストはこのアドオンから直接利用できません。その代わりにこのアドオンはMisra PDF ファイルまたはテキストファイルのどちらかからルールテキストを読み込めます。 + +
+ 要求事項 + + Cppcheck MISRA アドオンには次のものが必要です。: + + + + Python (2系 または 3系) + + + + MISRA PDF/Text ファイル(ルールテキスト) + + +
+ +
+ MISRA PDF + + もしあなたのコードMISRA規格に合致していることを望んでいるなら、あなたはMISRA PDFを持っているでしょう。 + + しかしながら、MISRA PDF が直接このアドオンから使用するには、xpdfパッケージを持っている場合に限ります。これはクロスプラットフォームのオープンソースパッケージです。 +
+ +
+ MISRA テキストファイル + + もしあなたがxpdfを持っているなら、テキストファイルはコマンドラインから簡単に生成できます。 (pdftotextxpdfに含まれています。): + + pdftotext misra-c-2012.pdf output.txt + + その他のpdfからtextに変換するソフトでもうまくいくでしょう。 + + テキストファイルをマニュアルで作成してするには、MISRA PDFの Appendix A "Summary of guidelines" をコピーペーストします。フォーマット: + + Appendix A Summary of guidelines +Rule 1.1 +Rule text +Rule 1.2 +Rule text +... +
+
+ 出力の抑制 @@ -520,7 +717,7 @@ uninitvar
インライン出力抑制 - エラー出力の抑制をソースコーオ中に直接、コメントの形で記載することもできます。このコメントには特別なキーワードを含めて記載します。ただし、インライン出力を抑制するコメントをソースコードに追加すると、ソースコードの可読性が少し悪くなってしまうかもしれません。 + エラー出力の抑制をソースコード中に直接、コメントの形で記載することもできます。このコメントには特別なキーワードを含めて記載します。ただし、インライン出力を抑制するコメントをソースコードに追加すると、ソースコードの可読性が少し悪くなってしまうかもしれません。 このソースコードは通常エラメッセージを出力する例です。: @@ -553,15 +750,19 @@ Checking test.c... ライブラリ設定 - windows, posix, gtk, qt,他の外部のライブラリを使用した場合、Cppcheckは外部の関数がどのようなものであるかがわかりません。Cppcheck はそのため、メモリリークやバッファオーバーフロー、ヌルポインタのデリファレンスの可能性といったさまざまな問題が検出できません。これを解決するには設定ファイル(.cfg file)を使用します。 + WinAPI, POSIX, gtk, Qtなど他の外部のライブラリを使用した場合、Cppcheckは外部の関数がどのようなものであるかがわかりません。Cppcheck はそのため、メモリリークやバッファオーバーフロー、ヌルポインタのデリファレンスの可能性といったさまざまな問題が検出できません。これを解決するには設定ファイル(.cfg file)を使用します。 - もしあなたが有名なライブラリの設定ファイルを作成したときには、私達のサイトにアップロードしてくれると非常に助かります。 + Cppcheckはいくつかのライブラリ用の設定を持っています。これらは次のようにしてロードできます。cppcheckは C または C++言語用の標準ライブラリの設定 std.cfgはいつもロードします。ご注意ください。もしあなたが有名なライブラリの設定ファイルを作成した場合や更新した場合には、私達のサイトにアップロードしてくれると非常に助かります。
カスタム設定ファイル(.cfg file)の使用 あなたのプロジェクト専用の設定ファイルを作成し、使用することができます。そのためには、--check-library--enable=information を使用して設定のためのヒントを入手します。 + 設定ファイルの編集に、Library Editorの使用をお勧めします、これはCppcheck GUIに含まれています。これはViewメニューで使用できます。すべての設定がこのマニュアルに載っていません。 + + この設定ファイル.cfgのフォーマットに質問がある場合、フォーラム(http://sourceforge.net/p/cppcheck/discussion/)で質問してください。 + コマンドラインのcppcheck はカスタマイズした設定ファイル(.cfg files)を作業パスから読み込もうとします。作業パスはcppcheckを実行しているパスですでそこに設定ファイルがあると考えます。 GUIのcppcheckはプロジェクトのファイルパスから設定ファイルを読み込もうとします。カスタマイズした設定ファイル(.cfg file)は プロジェクトファイルの編集 ダイアログで確認できます。このタイアログを表示させるにはファイル メニューから開いてください。 @@ -570,7 +771,7 @@ Checking test.c...
メモリーリソースのリーク - Cppcheck はリークのチェックについての設定できます。 + Cppcheck はリークのチェックが調整できます。言い換えれば、あなたはメモリーやリソースを割り当てる関数またはその割り当てを回収する関数を指定できます。
alloc と dealloc @@ -582,12 +783,12 @@ Checking test.c... HPEN pen = CreatePen(PS_SOLID, 1, RGB(255,0,0)); } - このサンプルには、リーソースのリークがあります。CreatePen()はWindowsの関数でpenを作成します。しかし、Cppcheck はこの関数が返す値を解放しなければならないことがわかりません。そのためエラーメッセージは表示されません。: + 上のコード例はリソースリークの欠陥があります。 - CreatePen() は WinAPI 関数でpenを作成します。しかし、Cppcheckは関数からの返り値が解放されていなければならないと仮定しません。そのためエラーメッセージは表示されません。: # cppcheck pen1.c Checking pen1.c... - もし、windowsの設定ファイルをCppcheckに提供すれば、この問題を指摘することができるようになります。: + もしあなたが設定ファイルを与えれば、Cppcheckはバグを検出します。: # cppcheck --library=windows.cfg pen1.c Checking pen1.c... @@ -602,6 +803,8 @@ Checking pen1.c... <dealloc>DeleteObject</dealloc> </resource> </def> + + このアロケート関数とデアロケート関数はグループにまとめられています。それぞれのグループは<resource><memory> タグ中で定義されており、その<dealloc>関数によって特定されます。これは、<dealloc>タグでオーバーラップしたグループはマージされます。
@@ -617,14 +820,13 @@ Checking pen1.c... もし設定ファイルがなく、Cppcheckがdostuffの仕様を把握していなければ、Cppcheckはdostuffがメモリーについて配慮しており、メモリーリークは発生しないと仮定します。 - dostuffがメモリーについて配慮せず、解放などを行なっていないことを指定するためには、leak-ignoreを使用します。: + dostuffがメモリーについて配慮せず、解放などを行なっていないことを指定するためには、leak-ignore<function> タグ中で使います。: <?xml version="1.0"?> <def> <function name="dostuff"> <leak-ignore/> <arg nr="1"/> - <arg nr="2"/> </function> </def> @@ -633,42 +835,88 @@ Checking pen1.c... <?xml version="1.0"?> <def> <memory> - <alloc>malloc</alloc> <dealloc>free</dealloc> <use>dostuff</use> </memory> </def> - なお、この<use>設定には論理的には全く無意味です。この設定がない場合でも同じエラーが表示されます。これは--check-libraryのinformationメッセージを減らすために使用します。 + なお、この<use>の設定は論理的に全く無意味です。この設定がない場合でも同じエラーが表示されます。これは--check-libraryのinformationメッセージを減らすために使用します。
- 関数引数: 未初期化メモリ + 関数の動作 - ここにサンプルのプログラムがあります。: + 関数の動作や関数の使用方法を指定するのに、<function>タグが使えます。関数は、その名前によって特定されます。この名前は、name 属性とその引数によって指定されます。この名前はコンマで区切られた関数名のリストです。名前空間やクラス中の関数の場合には、完全修飾名で指定されます。例: <function name="memcpy,std::memcpy">もしテンプレート関数がある場合、インスタンス化した名前を提供してします。<function name="dostuff<int>">. - void test() +
+ 関数引き数 + + 関数がとる引数は、<arg>タグで指定できます。引数のそれぞれは、引数の順番(1始まり)をnr属性で示します。nr="any" は任意の引き数を表します。また、nr="variadic"は可変長引数を表します。オプション引数は、デフォルト値で指定します。: default="value". それぞれの引数に対する設定は、全ての引数に対する指定を上書きします。 + +
+ 非ブール + + ここで誤った比較のあるサンプルプログラムがあります。: + + void test() +{ + if (MemCmp(buffer1, buffer2, 1024==0)) {} +} + + Cppcheckは、この関数にブール値を渡してよいと仮定します。: + + # cppcheck notbool.c +Checking notbool.c... + + もしあなたが設定ファイルを与えれば、Cppcheckはバグを検出します。: + + # cppcheck --library=notbool.cfg notbool.c +Checking notbool.c... +[notbool.c:5]: (error) Invalid MemCmp() argument nr 3. 非ブール値が求められています。 + + ここで最小のnotbool.cfgを用意しました。 + + <?xml version="1.0"?> +<def> + <function name="MemCmp"> + <arg nr="1"/> + <arg nr="2"/> + <arg nr="3"> + <not-bool/> + </arg> + </function> +</def> +
+ +
+ 未初期化メモリ + + ここにサンプルのプログラムがあります。: + + void test() { char buffer1[1024]; char buffer2[1024]; CopyMemory(buffer1, buffer2, 1024); } - このプログラムのバグは buffer2 が初期化されていないことです。CopyMemory 関数の第二引数は初期化されている必要があります。しかし、Cppcheckは関数に未初期化の変数を渡してもよいと仮定しています。: + このプログラムのバグは buffer2 が初期化されていないことです。CopyMemory 関数の第二引数は初期化されている必要があります。しかし、Cppcheckは関数に未初期化の変数を渡してもよいと仮定しています。: - # cppcheck uninit.c + # cppcheck uninit.c Checking uninit.c... - もし、windowsの設定ファイルをCppcheckに提供すれば、この問題を指摘することができるようになります。: + もしあなたが設定ファイルを与えれば、Cppcheckはバグを検出します。: - # cppcheck --library=windows.cfg uninit.c + # cppcheck --library=windows.cfg uninit.c Checking uninit.c... [uninit.c:5]: (error) Uninitialized variable: buffer2 - これが最小限のwindows.cfgファイルです。: + 注意:これは、ポインタが示すメモリ領域が初期化されていなければならないことを意味しています。 - <?xml version="1.0"?> + これが最小限のwindows.cfgファイルです。: + + <?xml version="1.0"?> <def> <function name="CopyMemory"> <arg nr="1"/> @@ -678,32 +926,34 @@ Checking uninit.c... <arg nr="3"/> </function> </def> -
+
-
- 関数引数: ヌルポインタ +
+ ヌルポインタ - Cppcheckは、関数にヌルポインタを渡してもよいと仮定しています。ここにサンプルのプログラムがあります。: + Cppcheckは、関数にヌルポインタを渡してもよいと仮定しています。ここにサンプルのプログラムがあります。: - void test() + void test() { CopyMemory(NULL, NULL, 1024); } - MSDNの文書はこれが問題あるかないかを明らかにしていません。しかし、ここでは問題ありと仮定します。Cppcheck は関数にヌルポインタを渡してもよいと仮定していますので、エラーを出力しません。: + MSDNの文書はこれが問題あるかないかを明らかにしていません。しかし、ここでは問題ありと仮定します。Cppcheck は関数にヌルポインタを渡してもよいと仮定していますので、エラーを出力しません。: - # cppcheck null.c + # cppcheck null.c Checking null.c... - もし、windowsの設定ファイルをCppcheckに提供すれば、この問題を指摘することができるようになります。: + もしあなたが設定ファイルを与えれば、Cppcheckはバグを検出します。: - cppcheck --library=windows.cfg null.c + cppcheck --library=windows.cfg null.c Checking null.c... [null.c:3]: (error) Null pointer dereference - これが最小限のwindows.cfg ファイルです: + 注意:<not-uninit>は値について意味しています。初期化されていないメモリが関数に渡されています。 - <?xml version="1.0"?> + これが最小限のwindows.cfg ファイルです: + + <?xml version="1.0"?> <def> <function name="CopyMemory"> <arg nr="1"> @@ -713,26 +963,26 @@ Checking null.c... <arg nr="3"/> </function> </def> -
+
-
- 関数引数: フォーマット文字列 +
+ フォーマット文字列 - フォーマット文字列を扱う関数を定義できます。例: + フォーマット文字列を扱う関数を定義できます。例: - void test() + void test() { do_something("%i %i\n", 1024); } - これについてもエラーは報告されません。: + これについてもエラーは報告されません。: - # cppcheck formatstring.c -Checking formatstring.c... + # cppcheck formatstring.c + Checking formatstring.c... - 引数がフォーマット文字列であることを出力する設定ファイルが作成できます。設定ファイルの例です。: + 引数がフォーマット文字列であることを出力する設定ファイルが作成できます。設定ファイルの例です。: - <?xml version="1.0"?> + <?xml version="1.0"?> <def> <function name="do_something"> <formatstr type="printf"/> @@ -740,83 +990,83 @@ Checking formatstring.c... <formatstr/> </arg> </function> -</def>これで、Cppcheckはエラーを報告することができるようになりました。: +</def>これで、Cppcheckはエラーを報告できるようになりました。: - cppcheck --library=test.cfg formatstring.c + cppcheck --library=test.cfg formatstring.c Checking formatstring.c... [formatstring.c:3]: (error) do_something format string requires 2 parameters but only 1 is given. - このフォーマット文字列のtype属性は次のどちらかになります。: + このフォーマット文字列のtype属性は次のどちらかになります。: - - - printf - printf のルールに従うフォーマット文字列 - + + + printf - printf のルールに従うフォーマット文字列 + - - scanf - scanf のルールに従うフォーマット文字列 - - -
+ + scanf - scanf のルールに従うフォーマット文字列 + + +
-
- 関数引数: 値の範囲 +
+ 値の範囲 - 有効な値の範囲が定義できます。想像してください。: + 有効な値の範囲が定義できます。想像してください。: - void test() + void test() { do_something(1024); } - これについてもエラーは報告されません。: + これについてもエラーは報告されません。: - # cppcheck valuerange.c + # cppcheck valuerange.c Checking valuerange.c... - 1024 が 範囲外の値であることを出力する設定ファイルが作成できます。設定ファイルの例です。: + 1024 が 範囲外の値であることを出力する設定ファイルが作成できます。設定ファイルの例です。: - <?xml version="1.0"?> + <?xml version="1.0"?> <def> <function name="do_something"> <arg nr="1"> <valid>0:1023</valid> </arg> </function> -</def>これで、Cppcheckはエラーを報告することができるようになりました。: +</def>これで、Cppcheckはエラーを報告できるようになりました。: - cppcheck --library=test.cfg range.c + cppcheck --library=test.cfg range.c Checking range.c... -[range.c:3]: (error) Invalid do_something() argument nr 1. The value is 1024 but the valid values are '0-1023'. +[range.c:3]: (error) Invalid do_something() argument nr 1. この値は1024ですが、妥当な値は0から1023までです。 - validの要素で次のような表現が利用できます。: + validの要素で次のような表現が利用できます。: - 0,3,5 => 0, 3 それに 5 だけが有効な値です。 + 0,3,5 => 0, 3 それに 5 だけが有効な値です。 -10:20 => -10 から 20 までの値(両端含む)が有効な値です。 :0 => 0または0未満の値が有効な値です。 0: => 0または0以上の値が有効な値です。 0,2:32 => 0 または2から32までの値(両端含む)が有効な値です。 -
+
-
- 関数引数: 最小サイズ +
+ 最小サイズ - いくつかの関数はバッファーを引数にとります。バッファの最小サイズを指定することができます。(要素数ではなくバイト数です。)想像してください。: + いくつかの関数はバッファーを引数にとります。バッファの最小サイズを指定することができます。(要素数ではなくバイト数です。)想像してください。: - void test() + void test() { char str[5]; do_something(str,"12345"); } - これについてもエラーは報告されません。: + これについてもエラーは報告されません。: - # cppcheck minsize.c + # cppcheck minsize.c Checking minsize.c... - 設定ファイルで、例えば、引数1のバッファのサイズが引数2の文字列長より大きくなればならないと警告するような設定ファイルを作成できます。例を挙げます。: + 設定ファイルで、例えば、引数1のバッファのサイズが引数2の文字列長より大きくなればならないと警告するような設定ファイルを作成できます。例を挙げます。: - <?xml version="1.0"?> + <?xml version="1.0"?> <def> <function name="do_something"> <arg nr="1"> @@ -824,56 +1074,72 @@ Checking minsize.c... </arg> <arg nr="2"/> </function> -</def>これで、Cppcheckはこのエラーを報告することができるようになりました。: +</def>これで、Cppcheckはこのエラーを報告できるようになりました。: - cppcheck --library=1.cfg minsize.c + cppcheck --library=1.cfg minsize.c Checking minsize.c... [minsize.c:4]: (error) Buffer is accessed out of bounds: str - minsizes はいくつかの種類があります。: + minsizes はいくつかの種類があります。: - - - strlen + + + strlen - - バッファーのサイズが、その他の引数の文字列長より大きくなければなりません。例: std.cfg のstrcpyの設定を参照してください。 - - + + バッファーのサイズが、その他の引数の文字列長より大きくなければなりません。例: std.cfg のstrcpyの設定を参照してください。 + + - - argvalue + + argvalue - - バッファーのサイズがその他の引数の値より大きくなればなりません。例: std.cfg のmemsetの設定を参照してください。 - - + + バッファーのサイズがその他の引数の値より大きくなればなりません。例: std.cfg のmemsetの設定を参照してください。 + + - - sizeof + + sizeof - - バッファーのサイズがその他の引数のバッファーのサイズより大きくなればなりません。例: std.cfg のstrcnpyの設定を参照してください - - + + バッファーのサイズがその他の引数のバッファーのサイズより大きくなればなりません。例:posix.cfgのmemccpyの設定をみてください。 + + - - mul + + mul - - バッファーのサイズがその他の2つの引数の値の積より大きくなればなりません。典型的な使用例としては、一つの引数が構造体などの要素のサイズを指定し、もうひとつの引数が要素の個数を定義するような場合です。例: std.cfg のfreadの設定を参照してください - - - -
+ + バッファーのサイズがその他の2つの引数の値の積より大きくなればなりません。典型的な使用例としては、一つの引数が構造体などの要素のサイズを指定し、もうひとつの引数が要素の個数を定義するような場合です。例: std.cfg のfreadの設定を参照してください + + + +
-
- noreturn +
+ strz - Cppcheck はこの関数がいつも値を返すとは仮定していません。ここにサンプルのプログラムがあります。: + この設定は、Cppcheckで現在使用できません。しかし、これであなたは引数が0終端文字列でなければならないということができます。 - void test(int x) + <?xml version="1.0"?> +<def> + <function name="do_something"> + <arg nr="1"> + <strz/> + </arg> + </function> +</def> +
+
+ +
+ noreturn + + Cppcheck はこの関数がいつも値を返すとは仮定していません。ここにサンプルのプログラムがあります。: + + void test(int x) { int data, buffer[1024]; if (x == 1) @@ -883,64 +1149,140 @@ Checking minsize.c... buffer[0] = data; // <- error: xが1でないとき初期化されていない } - 理屈の上では、ZeroMemoryがプログラムを終了させてもバグはありません。そのため Cppcheckはエラーを報告しません。: + 理屈の上では、ZeroMemoryがプログラムを終了させてもバグはありません。そのため Cppcheckはエラーを報告しません。: - # cppcheck noreturn.c + # cppcheck noreturn.c Checking noreturn.c... - しかし、--check-library--enable=informationをつかうとエラーが出力されます。: + しかし、--check-library--enable=informationをつかうとエラーが出力されます。: - # cppcheck --check-library --enable=information noreturn.c + # cppcheck --check-library --enable=information noreturn.c Checking noreturn.c... [noreturn.c:7]: (information) --check-library: Function ZeroMemory() should have <noreturn> configuration - もし適切な windows.cfg が提供されていましたら、このバグは検出されます。: + もし適切な windows.cfg が提供されていましたら、このバグは検出されます。: - # cppcheck --library=windows.cfg noreturn.c + # cppcheck --library=windows.cfg noreturn.c Checking noreturn.c... [noreturn.c:8]: (error) Uninitialized variable: data - これが最小限のwindows.cfg ファイルです: + これが最小限のwindows.cfg ファイルです: - <?xml version="1.0"?> + <?xml version="1.0"?> <def> <function name="ZeroMemory"> <noreturn>false</noreturn> + <arg nr="1"/> + <arg nr="2"/> </function> </def> -
+
-
- use-retval +
+ use-retval - 他になにも指定されていない限り、cppcheckは関数が返り値を無視していても問題ないと仮定します。: + 他になにも指定されていない限り、cppcheckは関数が返り値を無視していても問題ないと仮定します。: - bool test(const char* a, const char* b) + bool test(const char* a, const char* b) { strcmp(a, b); // <- bug: strcmp の呼び出しは副作用を持ちませんが返り値を無視している。 return true; } - strcmp が副作用を持つ場合、パラメータが関数に渡されている結果を無視しても問題はなく、このような仮定は正しいといえます。: + strcmp が副作用を持つ場合、パラメータが関数に渡されている結果を無視しても問題はなく、このような仮定は正しいといえます。: - # cppcheck useretval.c + # cppcheck useretval.c Checking useretval.c... - もし適切なlib.cfg が提供されていましたら、このバグは検出されます。: + もし適切なlib.cfg が提供されていましたら、このバグは検出されます。: - # cppcheck --library=lib.cfg --enable=warning useretval.c + # cppcheck --library=lib.cfg --enable=warning useretval.c Checking useretval.c... -[noreturn.c:3]: (warning) Return value of function strcmp() is not used. +[useretval.c:3]: (warning) Return value of function strcmp() is not used. - これが最小限のlib.cfg ファイルです。: + これが最小限のlib.cfg ファイルです。: - <?xml version="1.0"?> + <?xml version="1.0"?> <def> <function name="strcmp"> <use-retval/> + <arg nr="1"/> + <arg nr="2"/> </function> </def> +
+ +
+ pure関数(pure)とconst関数 + + これらは、GCC関数属性のpureとconstに対応します。 + + pure関数は、値を返す以外の効果を持ちません。そしてその返り値はその関数の引数とグローバル変数によってのみ決まります。 + + const関数は、値を返す以外の効果を持ちません。そしてその返り値はその関数の引数によってのみ決まります。 + + ここにサンプルのプログラムがあります。: + + void f(int x) +{ + if (calculate(x) == 213) { + + } else if (calculate(x) == 213) { + // 到達不能コード + } +} + + もしcalculate() がconst関数であれば、calculate(x)は両方の条件で同じ値を返します。というのも、同じパラメータを引数にしているからです。 + + Cppcheck は通常、その結果が異なると仮定するため、Cppcheckはこのコード例に警告を出しません。: + + # cppcheck const.c +Checking const.c... + + もし適切なconst.cfg が提供されていましたら、このバグは検出されます。: + + # cppcheck --enable=style --library=const const.c +Checking const.c... +[const.c:7]: (style) Expression is always false because 'else if' condition matches previous condition at line 5. + + これが最小限のconst.cfg ファイルです。: + + <?xml version="1.0"?> +<def> + <function name="calculate"> + <const/> + <arg nr="1"/> + </function> +</def> +
+ +
+ 関数strcpyの設定例 + + 標準関数のstrcpyのための適切な設定は次のようになる。: + + <function name="strcpy"> + <leak-ignore/> + <noreturn>false</noreturn> + <arg nr="1"> + <not-null/> + </arg> + <arg nr="2"> + <not-null/> + <not-uninit/> + <strz/> + </arg> + </function> + + この<leak-ignore/> は、リークチェック中に関数呼び出しを無視するように、Cppcheckに伝えます。この関数は、割り当てられたメモリを解放しないことを意味しています。 + + この<noreturn> は、この関数が、返り値を返すかどうかをCppchecに伝えます。 + + この関数は第一引数にポインタを取ります。しかしこのポインタは、ヌルポインタであってはなりません。というのは<not-null>が使用されているからです。 + + この関数は第二引数にポインタを取ります。このポインタはヌルポインタであってはなりません。また、このポインタは初期化されたデータを指していなければなりません。<not-null><not-uninit> は正しく使用されています。さらにいえば、このポインタは0終端文字列(zero-terminated string)でなければなりません。そのため<strz>が使用されています。 +
@@ -959,7 +1301,7 @@ Checking useretval.c...
podtype - 多くのソースコードで、プラットフォームに依存しない型をtypedefによって定義しています。"podtype"のタグによって、cppcheckがこれらのサポートするために必要な情報を提供できます。このような情報のない場合、cppcheckは次の例でみるような "uint16_t" 型を理解できません。 + 多くのソースコードで、プラットフォームに依存しない型をtypedefによって定義しています。"podtype"のタグによって、cppcheckがこれらをサポートするために必要な情報を提供できます。このような情報のない場合、cppcheckは次の例でみるような "uint16_t" 型を理解できません。 void test() { uint16_t a; @@ -967,7 +1309,7 @@ Checking useretval.c... そのため、未使用変数である、'a'が未使用であるとのメッセージが表示されません。 - # cppcheck --enable=style unusedvar.cpp + # cppcheck --enable=style unusedvar.cpp Checking unusedvar.cpp... もし uint16_t が以下のように定義されていた場合、結果にメッセージが反映されます。 @@ -979,15 +1321,15 @@ Checking unusedvar.cpp... 型のサイズはバイトサイズで指定します。符号の "sign" 属性は 符号ありの "s" か 符号無し "u" のどちらかです。これらの属性はオプションです。このライブラリを使用しますと、cppcheckはメッセージを表示できるようになります。 - # cppcheck --library=lib.cfg --enable=style unusedvar.cpp + # cppcheck --library=lib.cfg --enable=style unusedvar.cpp Checking unusedvar.cpp... [unusedvar.cpp:2]: (style) Unused variable: a
- container + コンテナ(container) - C++ ライブラリの多くや STL 自身は、非常によく似た機能性をもつコンテナを提供する。ライブラリによってその動作をcppcheckに伝えることができる。それぞれのコンテナの設定にはユニークなIDが必要とします。コンテナの設定には、startPatternを加えることができます(オプション)。この startPatternはToken::Match パターンとendPattern に有効でなけばなりません。また、このendPatternはリンクしているトークンと比較されるものです。オブション属性の"inherits"は事前に定義されたコンテナのIDをとります。 + C++ ライブラリの多くや STL 自身は、非常によく似た機能性をもつコンテナを提供します。ライブラリによってその動作をcppcheckに伝えられます。それぞれのコンテナの設定にはユニークなIDが必要とします。コンテナの設定には、startPatternを加えることができます(オプション)。この startPatternはToken::Match パターンとendPattern に有効でなけばなりません。また、このendPatternはリンクしているトークンと比較されるものです。オブション属性の"inherits"は事前に定義されたコンテナのIDをとります。 <container>タグの内部で、<size>、<access>、<other>を選択して使用して関数を定義できます。これらのタグはそれぞれ、"resize" やその結果を与えるような動作を指定することができます。その例 "end-iterator"を示します。 @@ -1008,39 +1350,6 @@ Checking unusedvar.cpp... </container> </def>
- -
- 関数strcpyの設定例 - - 標準関数のstrcpyのための適切な設定は次のようになる。: - - <function name="strcpy"> - <leak-ignore/> - <noreturn>false</noreturn> - <arg nr="1"> - <not-null/> - </arg> - <arg nr="2"> - <not-null/> - <not-uninit/> - <strz/> - </arg> - </function> - - この<leak-ignore/> は、リークチェック中に関数呼び出しを無視するように、Cppcheckに伝えます。この関数は、割り当てられたメモリを解放しないことを意味しています。 - - この<noreturn> は、この関数が、返り値を返すかどうかをCppchecに伝えます。 - - この関数は第一引数にポインタを取ります。しかしこのポインタは、ヌルポインタであってはなりません。というのは<not-null>が使用されているからです。 - - この関数は第二引数にポインタを取ります。このポインタはヌルポインタであってはなりません。また、このポインタは初期化されたデータを指していなければなりません。<not-null><not-uninit> は正しく使用されています。さらにいえば、このポインタは0終端文字列(zero-terminated string)でなければなりません。そのため<strz>が使用されています。 -
- -
- 全ての引数に対する指定 - - 引数の数に -1を指定すると、チェック時にその関数の全ての引数に適用されます。それぞれの引数に対する設定は、全ての引数に対する指定を上書きします。 -
@@ -1377,4 +1686,4 @@ htmlreport/cppcheck-htmlreport --file=err.xml --report-dir=test1 --source-dir=.< このマニュアルの3 章にあるように、全てのコンパイルスイッチの組み合わせをチェックします。コンパイルスイッチの組み合わせを制限したい場合にだけ、プリプロセッサのdefineを指定してください。
- + \ No newline at end of file