組み込み関数

SAL の式は副作用のない式 (++, -- など) であれば C/C++ 式にすることができます。すべての関数呼び出しは、このコンテキストでは副作用があります。 ただし、SAL には、関数に似たオブジェクトや、SAL 式で使用できる予約済みのシンボルがいくつか用意されています。 これらは、組み込み関数と呼ばれます。

汎用

次の組み込み関数の注釈は、SAL の一般的なユーティリティを提供します。

注釈 説明
_Curr_ 現在注釈が付けられているオブジェクトのシノニム。 _At_ 注釈が使用されている場合、_Curr__At_ の最初のパラメーターと同じです。 それ以外の場合、それはパラメーター、または注釈が構文的に関連付けられている関数または戻り値の全体です。
_Inexpressible_(expr) バッファーのサイズが複雑すぎるため注釈式を使用して表すことができない状況を表します。たとえば、入力データセットをスキャンして選択したメンバーをカウントすることで計算された場合などです。
_Nullterm_length_(param) param はバッファー内の要素の数ですが、null 終端文字は含まれません。 集約されていない非 void 型の任意のバッファーに適用できます。
_Old_(expr) 前提条件で評価された場合、_Old_ は入力値 expr を返します。 事後条件で評価された場合、前提条件で評価された場合の値 expr を返します。
_Param_(n) 関数の n 番目のパラメーター。1 からまで n をカウントし、n はリテラル整数定数です。 パラメーターに名前が付けられている場合、この注釈は、名前によってパラメーターにアクセスする場合と同じです。 注:n は、省略記号で定義された位置指定パラメーターを参照することも、名前が使用されない関数プロトタイプで使用することもできます。
return 関数の戻り値を示すには、SAL 式で C/C++ 予約キーワード return を使用できます。 この値は事後状態でのみ使用できます。事前状態で使用すると、構文エラーとなります。

文字列固有

次の組み込み関数の注釈を使用すると、文字列の操作が可能になります。 これらの 4 つの関数はすべて同じ目的を果たし、null 終端文字の前に見つかった型の要素の数を返します。 違いは、参照される要素内のデータの種類です。 文字で構成されていない null で終わるバッファーの長さを指定する場合は、前のセクションの _Nullterm_length_(param) 注釈を使用します。

注釈 説明
_String_length_(param) param は文字列内にある null 終端文字までの要素の数です (その文字は含めません)。 この注釈は、文字の文字列の型のために予約されています。
strlen(param) param は文字列内にある null 終端文字までの要素の数です (その文字は含めません)。 この注釈は、文字配列で使用するために予約されており、C ランタイム関数 strlen () に似ています。
wcslen(param) param は文字列内にある null 終端文字までの要素の数です (その文字は含めません)。 この注釈は、ワイド文字配列で使用するために予約されており、C ランタイム関数 wcslen() に似ています。

関連項目