共用方式為


如何使用 指定其他程式碼資訊 _Analysis_assume_

您可以為 C/C++ 程式碼的程式碼分析工具提供提示,以協助分析程式並減少警告。 若要提供其他資訊,請使用下列函式宏:

_Analysis_assume_( expr )

expr - 假設評估為 true 的任何運算式。

程式碼分析工具假設運算式 expr 所表示的條件在函式出現時為 true。 而且,在變更之前 expr ,它會維持為 true,例如,藉由指派給變數。

注意

_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_ 應作為最後手段使用。 我們應該先嘗試讓函式的合約更精確。 在此情況下,我們可以改善 的 FreeAndNull 合約,而不是使用 _Analysis_assume_

#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);
}

另請參閱