方法: _Analysis_assume_ を使用して追加のコード情報を指定する

C/C++ コードのコード分析ツールにヒントを提供して、分析プロセスを支援し、警告を減らすことができます。 追加情報を提供するには、次の関数マクロを使用します。

_Analysis_assume_( expr )

expr - 評価が true になると想定される式。

コード分析ツールは、式 expr で表される条件が、関数が表示される時点で true を想定しています。 また、変数への代入などによって expr が変更されるまでは true のままです。

Note

_Analysis_assume_ は、コードの最適化には影響を与えない。 コード分析ツールの外部では、_Analysis_assume_ は no-op として定義されます。

次のコードでは、_Analysis_assume_ を使用してコード分析の警告 C6388 を訂正します。

#include <windows.h>
#include <sal.h>

// Requires pc to be null.
void f(_Pre_null_ char* pc);

// Calls free and sets ch to null.
void FreeAndNull(char** ch);

void test()
{
    char* pc = (char*)malloc(5);
    FreeAndNull(&pc);
    _Analysis_assume_(pc == NULL);
    f(pc);
}

_Analysis_assume_ 最後の手段として使用する必要があります。 まず、関数のコントラクトをより正確にしようとする必要があります。 この場合、次を使用_Analysis_assume_する代わりにコントラクトFreeAndNullを改善できます。

#include <windows.h>
#include <sal.h>

// Requires pc to be null.
void f(_Pre_null_ char* pc);

// Calls free and sets ch to null.
_At_(*ch, _Post_null_)
void FreeAndNull(char** ch);

void test()
{
    char* pc = (char*)malloc(5);
    FreeAndNull(&pc);
    f(pc);
}

関連項目