C/C++ KAST カスタム関数の作成とテスト
KAST カスタム関数は、単純な C API を使用して記述します。カスタム関数は、カスタム述語または getter メソッドのいずれかの形式で KAST 言語に 1 つ以上の拡張子を定義します。いずれの場合も、カスタム関数はソースモジュールを表す AST で特定のクエリまたは相互作用を実行します。
KAST チェッカーが、Klocwork の標準組み込み関数で使用できない条件を必要とする場合は、通常 KAST カスタム関数を作成します。組み込み関数のリストについては、Checker Studio を起動し、[ヘルプ] > [ヘルプトピック] > [KAST リファレンス] > [C/C++ KAST 組み込み関数リファレンス] に移動します。既に入手可能になものを再作成しないように、必ず最新の組み込み関数のリストを参照してください。
カスタム関数がコード化されたら、それを KAST 式内で呼び出し、その関数が含まれたライブラリの名前をチェッカー定義で指定するだけです。KAST API は、Klocwork C/C++ AST API リファレンス に説明されています。
この記事の最初の部分では、カスタムチェッカーの記述とテストに使用される標準的なワークフロー、およびそのテンプレート ワークフローをカスタマイズして効率を高める方法を説明します。この記事の残りの部分は、カスタム関数に使用されるテクニックの例を紹介します。極めて単純なカスタム関数の例から始め、より複雑な関数の例を順に示します。
- "Hello world"
- エラーメッセージの変更
- クラスとメンバーのリスト作成
- 継承情報へのアクセス
- AST ツリーをトラバースする
- KAST カスタム関数へのトラバーサルの適用
- 'descendant::' 検索の設計
注意: カスタム関数が、チェッカーの展開先のターゲットマシンと同じタイプ (同じ OS 配布および同じ配布バージョン) のマシン上でビルドされていることを確認します。Unix システムの場合は、チェッカーがコンパイルされたマシンは、チェッカーの展開先のマシンと互換性のあるバージョンの GLibC を使用する必要があります。