对函数行为进行批注

除批注 函数参数和返回值外,还可以批注所有功能的属性。

功能性批注

下面的批注整体应用于函数并描述其行为方式以及它希望为 true。

批注

描述

_Called_from_function_class_(name)

未打算单独的突出;相反,它是要使用的谓词与 _When_ 批注。有关更多信息,请参见指定何时以及在何处应用批注

name 参数同时出现在某些功能的声明一个 _Function_class_ 批注的任意字符串。_Called_from_function_class_ 返回非零,如果当前分析的功能批注使用具有 name的相同值的 _Function_class_ ;否则,它返回零。

_Check_return_

说明一个返回值并指出,调用方应当检查它。如果函数在无效上下文,调用编写检查器报告错误。

_Function_class_(name)

name 参数是由用户指定的任意字符串。它存在从其他命名空间不同的命名空间。函数、函数指针,或更 usefully-a 函数指针类型可以被指定为属于一个或多个功能选件类。

_Raises_SEH_exception_

说明始终引发结构化异常处理程序 (SEH) 异常,受 _When_ 和 _On_failure_ 情况的函数。有关更多信息,请参见指定何时以及在何处应用批注

_Maybe_raises_SEH_exception_

说明可以选择引发 SEH 异常,受 _When_ 和 _On_failure_ 情况的函数。

_Must_inspect_result_

批注所有输出值,包括返回值、参数和全局变量。如果在批注的对象值以后不会检查,则分析器报告错误。“测试”包含是否使用一个条件表达式,分配给输出参数或全局,或作为参数。对于返回值,_Must_inspect_result_ 提示 _Check_return_。

_Use_decl_annotations_

在函数定义 (也称为函数体) 使用在注释位置列表在该标头。当使用时 _Use_decl_annotations_,显示在同一函数的范围标头使用的批注,则还显示在具有 _Use_decl_annotations_ 批注的定义。

成功或失败批注

函数会失败,并且,时,它时,其结果可能无法完成或产生不同,因此当函数成功时。在下面的批注列表提供表示方法失败行为。若要使用这些批注,必须使它们确定成功;因此,需要 _Success_ 批注。请注意 NTSTATUS 和 HRESULT 已具有一个 _Success_ 批注生成到;但是,因此,如果在 NTSTATUS 或 HRESULT指定您的 _Success_ 批注,它重写了内置批注。

批注

描述

_Always_(anno_list)

为 anno_list _On_failure_(anno_list)等效项;即 anno_list 的批注将该功能是否成功。

_On_failure_(anno_list)

通过在 typedef 的 _Return_type_success_ 将使用,只有 + 当 _Success_ 还用于显式批注功能任何或隐式。当 _On_failure_ 批注存在于函数参数或返回值时,在 (anno) 的每个批注的 anno_list 的行为,就象代码作为 _When_(!expr, anno),expr 是由参数为必需的 _Success_ 批注。这意味着 _Success_ 的提示应用于所有后期状态的不适用 _On_failure_。

_Return_type_success_(expr)

适用于 typedef。指示返回该类型,并且不显式将 _Success_ 的所有功能说明,就好像它们具有 _Success_(expr)。_Return_type_success_ 在函数或函数指针的 typedef 不能使用。

_Success_(expr)

expr 需要为 rvalue 的表达式。当 _Success_ 批注存在于函数声明或定义时,每个批注 (anno) 在函数和在后期状态行为,就象代码作为 _When_(expr, anno)。_Success_ 批注在一个函数只能使用,而不是在其参数或返回类型。可以最多具有在函数的一个 _Success_ 批注,因此,它无法在任何 _When_、_At_或 _Group_。有关更多信息,请参见指定何时以及在何处应用批注

请参见

参考

对函数参数和返回值进行批注

批注结构和类

对锁定行为进行批注

指定何时以及在何处应用批注

内部函数

最佳做法和示例 (SAL)

概念

了解 SAL

其他资源

使用 SAL 批注以减少 C/C++ 代码缺陷