注釈を適用するタイミングと場所の指定

注釈が条件付きである場合は、それをアナライザーに指定するために他の注釈が必要な場合があります。 たとえば、関数に同期または非同期のいずれかの変数がある場合、関数は次のように動作します。同期の場合は常に成功しますが、非同期の場合、すぐに成功できない場合はエラーが報告されます。 関数が同期的に呼び出される場合、結果の値をチェックすると、返されないので、コード アナライザーに値は提供されません。 ただし、関数が非同期的に呼び出され、関数の結果がチェックされない場合は、重大なエラーが発生する可能性があります。 この例では、この記事で後述する _When_ 注釈を使用してチェックを有効にできる状況を示します。

構造的な注釈

注釈を適用する場合と場所を制御するには、次の構造注釈を使用します。

注釈 説明
_At_(expr, anno-list) expr は lvalue を生成する式です。 anno-list の注釈は、expr によって名前が付けられた オブジェクトに適用されます。 anno-list の注釈ごとに、expr は、事前条件で注釈が解釈される場合は事前条件で、事後条件で注釈が解釈される場合は事後条件で解釈されます。
_At_buffer_(expr, iter, elem-count, anno-list) expr は lvalue を生成する式です。 anno-list の注釈は、expr によって名前が付けられた オブジェクトに適用されます。 anno-list 内の注釈ごとに、expr は、事前条件で注釈が解釈される場合は事前条件で、事後条件で注釈が解釈される場合は事後条件で解釈されます。

iter は、注釈にスコープが設定されている変数の名前です (anno-list を含む)。 iter には暗黙的な型 long があります。 囲むスコープ内の同じ名前の変数は、評価から非表示になります。

elem-count は、整数に評価される式です。
_Group_(anno-list) anno-list の注釈はすべて、各注釈に適用されるグループ注釈に適用される修飾子を持つと見なされます。
_When_(expr, anno-list) expr は、bool に変換できる式です。 0 以外 (true) の場合は、anno-list で指定された注釈が該当すると見なされます。

既定では、anno-list の注釈ごとに、expr は、注釈が事前条件の場合は入力値を使用し、注釈が事後条件の場合は出力値を使用すると解釈されます。 既定値をオーバーライドするには、事後条件を評価するときに _Old_ 組み込みを使用して、入力値を使用する必要があるかどうかを示します。 注意: _When_ を使用した結果、例えば *pLength のような変更可能な値が含まれる場合、前提条件における expr の評価結果が後条件における評価結果と異なる可能性があるため、異なる注釈が有効になる場合があります。

関連項目