方法: _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);
}