次の方法で共有


警告 C28196

要件が満たされていません (式は true に評価されません)

この警告は、分析__notnull対象の関数にパラメーターまたは戻り値に対して 、__null__drv_valueIsまたは同様の_Out_注釈があるが、返される値がその注釈と矛盾していることを示します。

解説

このような__notnull注釈は、パラメーターと戻り値に関する_Out_不変性を記述します。これは、関数の作成者のドキュメントとサニティ チェックの両方として機能します。 警告 C28196 は、注釈と関数の実際の動作の不一致を示します。 この警告は、特定の入力値に対して関数が予期せず動作する可能性があるケースを検出する場合に役立ちます。 次に、関数の意図された動作を決定し、それに応じて注釈または実装を適応させるのは、作成者次第です。

次の関数では、一部のコード パスが null ポインターを返す場合でも注釈が付 _Ret_notnull_ いているため、警告 C28196 が発生します。

#include <sal.h>

_Ret_notnull_
Item *get_item(_In_reads_(len) Item *items, size_t len, size_t index) {
    if (index >= len) {
        return nullptr;
    }

    return items + index;
}

この問題を解決するには、関数の動作を正確に反映するように注釈を調整します。

#include <sal.h>

_When_(index < len, _Ret_notnull_)
Item *get_item(_In_reads_(len) Item *items, size_t len, size_t index) {
    if (index >= len) {
        return nullptr;
    }

    return items + index;
}

関連項目

関数パラメーターおよび戻り値の注釈設定
注釈を適用するタイミングと場所の指定\