SAL (Source Annotation Language) とは、Microsoft のソース コード注釈言語です。
SALは、関数がそのパラメーターや、それらについて行う想定を終了するときに行う保証を使用する方法について説明するために使用できる注釈のセットを提供します。
注釈はヘッダー ファイルで定義されている<sal.h>します。
C++ 用の visual Studio コード分析では、SAL 注釈を使用して、関数の分析を変更します。
SALの例、使い方
SALの具体例を説明します。
SALは、人間とコード分析ツールの両方にとって、コード デザインをわかりやすくするのに役立ちます。
たとえば、memcpy の例を見てみましょう。
1 2 3 4 5 |
void * memcpy( void *dest, const void *src, size_t count ); |
これだけだと、この関数の動作はわからないでしょう?
SALを使うと、この関数は次のような表現になります。
1 2 3 4 5 |
void * memcpy( _Out_writes_bytes_all_(count) void *dest, _In_reads_bytes_(count) const void *src, size_t count ); |
これで幾らか分かりやすくなるでしょう。
SAL の基礎
SALの簡単な使い方を見てみましょう。
SAL は、使用パターンによって分類のパラメーターの 4 つの基本的な種類を定義します。
カテゴリ | パラメータの解釈 | 説明 |
---|---|---|
入力に関数が呼び出されます | _In_ | データは、呼び出された関数に渡され、読み取り専用として扱われます。 |
呼び出し元に力を呼び出した関数への入力 | _Inout_ | 使用可能なデータは、関数に渡され、変更される可能性があります。 |
呼び出し元への出力 | _Out_ | 呼び出し元は、呼び出された関数への書き込みを行うための領域のみを提供します。 呼び出された関数では、その領域にデータを書き込みます。 |
呼び出し元へのポインターの出力 | _Outptr_ | Output to caller。 呼び出し先関数によって返される値は、ポインターです。 |
これら 4 つの基本的な注釈で、さまざまな方法がより明確な行われたことができます。
デフォルトでは、注釈付きのポインターパラメーターが必要になると想定: 関数が成功するには、NULL以外でなければなりません。
最もよく使用される基本的な注釈のバリエーションは、ポインター パラメーターが省略可能であることを示します: NULL の場合、関数は、その作業を行うには成功もします。
コメント