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

当批注是条件时,它要求其他批注指定了为分析器。例如,在中,如果函数有可能是同步或异步的变量,函数的行为如下所示:在同步用例它总是最终成功,但是,在异步用例则将报告错误,则无法立即成功。当函数同步调用时,检查结果值不提供值传递到代码分析器,因为它不会返回。但是,那么,当函数异步调用,而函数的结果不会检查,一个严重的错误。此示例演示可以使用命名稍后部分进行批注描述的 _When_ 文章启用检查的情况。

结构化批注

若要控制批注何时处理应用,请使用以下结构化批注。

批注

描述

_At_(expr, anno-list)

expr 与其左值的表达式。在 anno-list 的批注适用于由 expr名为的对象。对于 anno-list的每个批注,expr 解释在前置条件,如果批注在前置条件解释和在后期状态,如果批注在前面的已解释。

_At_buffer_(expr, iter, elem-count, anno-list)

expr 与其左值的表达式。在 anno-list 的批注适用于由 expr名为的对象。对于 anno-list的每个批注,expr 解释在前置条件,如果批注在前置条件解释和在后期状态,如果批注在前面的已解释。

iter 是作用于批注将变量的名称 (包含 anno-list)。iter 具有隐式类型 long。在所有封闭范围中的同名变量从计算隐藏。

elem-count 是计算为 integer 的表达式。

_Group_(anno-list)

在 anno-list 的批注所有考虑具有应用于组批注向每个批注的所有限定符。

_When_(expr, anno-list)

expr 是可以转换为 bool的表达式。当它不为零 (true),在 anno-list 指定被视为适用的批注。

默认情况下,在 anno-list的每个批注,expr 解释使用输入值,如果该批注是前置条件,并使用输出值,如果该批注是后状态。若要重写了默认值,可以使用 _Old_ 内部,在评估后状态清单时应使用输入值。

说明说明
不同的批注可能会启用作为使用 _When_ 结果,如果一个变量值 (例如,*pLength—是包含的,因为 expr 的计算的结果在前置条件可与其在后期状态的计算的结果不同。

请参见

参考

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

对函数行为进行批注

批注结构和类

对锁定行为进行批注

内部函数

最佳做法和示例 (SAL)

概念

了解 SAL

其他资源

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