如何使用 _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);
}

另请参阅