Especificando quando e onde uma anotação se aplicaSpecifying When and Where an Annotation Applies

Quando uma anotação condicional, ele pode exigir outras anotações para especificar que o analisador.When an annotation is conditional, it may require other annotations to specify that to the analyzer. Por exemplo, se uma função tem uma variável que pode ser síncronas ou assíncronas, a função se comporta da seguinte maneira: no caso síncrono sempre eventualmente tiver êxito, mas no caso assíncrono relata um erro se ele não pode ser bem-sucedida imediatamente.For example, if a function has a variable that can be either synchronous or asynchronous, the function behaves as follows: In the synchronous case it always eventually succeeds, but in the asynchronous case it reports an error if it can't succeed immediately. Quando a função é chamada de forma síncrona, verificar o valor do resultado não fornece um valor para o analisador de código porque não poderia ter retornado.When the function is called synchronously, checking the result value provides no value to the code analyzer because it would not have returned. No entanto, quando a função é chamada de forma assíncrona e o resultado da função não estiver marcado, pode ocorrer um erro grave.However, when the function is called asynchronously and the function result is not checked, a serious error could occur. Este exemplo ilustra uma situação em que você pode usar o _When_ anotação — descrito posteriormente neste artigo, para habilitar a verificação.This example illustrates a situation in which you could use the _When_ annotation—described later in this article—to enable checking.

Anotações estruturaisStructural Annotations

Para controlar quando e onde aplicam anotações, use as seguintes anotações estruturais.To control when and where annotations apply, use the following structural annotations.

AnotaçãoAnnotation DescriçãoDescription
_At_(expr, anno-list) expr é uma expressão que produz um lvalue.expr is an expression that yields an lvalue. As anotações na anno-list são aplicadas ao objeto que é chamado por expr.The annotations in anno-list are applied to the object that is named by expr. Para cada anotação em anno-list, expr é interpretado em pré-condição se a anotação é interpretada da pré-condição e na pós-condição de se a anotação é interpretada da pós condição de.For each annotation in anno-list, expr is interpreted in pre-condition if the annotation is interpreted in pre-condition, and in post-condition if the annotation is interpreted in post-condition.
_At_buffer_(expr, iter, elem-count, anno-list) expr é uma expressão que produz um lvalue.expr is an expression that yields an lvalue. As anotações na anno-list são aplicadas ao objeto que é chamado por expr.The annotations in anno-list are applied to the object that is named by expr. Para cada anotação em anno-list, expr é interpretado em pré-condição se a anotação é interpretada na pré-condição e na pós-condição de se a anotação é interpretada da pós condição de.For each annotation in anno-list, expr is interpreted in pre-condition if the annotation is interpreted in precondition, and in post-condition if the annotation is interpreted in post-condition.

iter é o nome de uma variável que é o escopo para a anotação (inclusivo do anno-list).iter is the name of a variable that is scoped to the annotation (inclusive of anno-list). iter tem um tipo implícito long.iter has an implicit type long. Variáveis com o mesmo nome em qualquer escopo delimitador ficam ocultos na avaliação.Identically named variables in any enclosing scope are hidden from evaluation.

elem-count é uma expressão que é avaliada como um número inteiro.elem-count is an expression that evaluates to an integer.
_Group_(anno-list) As anotações no anno-list são considerados ter qualquer qualificador que se aplica a anotação de grupo é aplicada a cada anotação.The annotations in anno-list are all considered to have any qualifier that applies to the group annotation that is applied to each annotation.
_When_(expr, anno-list) expr é uma expressão que pode ser convertida em bool.expr is an expression that can be converted to bool. Quando ele for diferente de zero (true), as anotações são especificadas em anno-list são considerados aplicável.When it is non-zero (true), the annotations that are specified in anno-list are considered applicable.

Por padrão, para cada anotação em anno-list, expr é interpretado como usando os valores de entrada, se a anotação é uma pré-condição e como usar os valores de saída se a anotação é uma pós condição de.By default, for each annotation in anno-list, expr is interpreted as using the input values if the annotation is a precondition, and as using the output values if the annotation is a post-condition. Para substituir o padrão, você pode usar o _Old_ intrínseco ao avaliar uma pós-condição de para indicar que os valores de entrada devem ser usados.To override the default, you can use the _Old_ intrinsic when you evaluate a post-condition to indicate that input values should be used. Observação: anotações diferentes podem ser habilitadas como consequência usando _When_ se um valor mutável — por exemplo, *pLength— está envolvido porque o resultado avaliado da expr na pré-condição podem diferir das suas avaliado resulta em pós-condição.Note: Different annotations might be enabled as a consequence of using _When_ if a mutable value—for example, *pLength—is involved because the evaluated result of expr in precondition may differ from its evaluated result in post-condition.

Consulte tambémSee Also

Usando anotações de SAL para reduzir defeitos de código C/C++ Compreendendo SAL anotando parâmetros de função e valores de retorno anotando o comportamento da função Anotando estruturas e Classes anotando o comportamento de bloqueio funções intrínsecas práticas recomendadas e exemplosUsing SAL Annotations to Reduce C/C++ Code Defects Understanding SAL Annotating Function Parameters and Return Values Annotating Function Behavior Annotating Structs and Classes Annotating Locking Behavior Intrinsic Functions Best Practices and Examples