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