Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Quando uma anotação é condicional, ela pode exigir outras anotações para especificar isso ao analisador. Por exemplo, se uma função tem uma variável que pode ser síncrona ou assíncrona, a função se comporta da seguinte maneira: No caso síncrono, ela sempre é bem-sucedida, mas no caso assíncrono ela relata um erro se não puder ser bem-sucedida imediatamente. Quando a função é chamada de forma síncrona, a verificação do valor do resultado não fornece nenhum valor para o analisador de código porque ele não teria retornado. No entanto, quando a função é chamada de forma assíncrona e o resultado da função não é verificado, um erro grave pode ocorrer. Este exemplo ilustra uma situação na qual se pode usar a _When_ anotação—descrita mais adiante neste artigo—para habilitar a verificação.
Anotações estruturais
Para controlar quando e onde as anotações se aplicam, use as seguintes anotações estruturais.
| Anotação | Descrição |
|---|---|
_At_(expr, anno-list) |
expr é uma expressão que produz um lvalue. As anotações em anno-list são aplicadas ao objeto nomeado por expr. Para cada anotação em anno-list, expr é interpretada em pré-condição se a anotação for interpretada em pré-condição, e em pós-condição se a anotação for interpretada em pós-condição. |
_At_buffer_(expr, iter, elem-count, anno-list) |
expr é uma expressão que produz um lvalue. As anotações em anno-list são aplicadas ao objeto nomeado por expr. Para cada anotação em anno-list, expr é interpretada em pré-condição se a anotação for interpretada em pré-condição, e em pós-condição se a anotação for interpretada em pós-condição.iter é o nome de uma variável que tem como escopo a anotação (incluindo anno-list).
iter tem um tipo longimplícito . As variáveis nomeadas de forma idêntica em qualquer âmbito de inclusão são ocultadas da avaliação.elem-count é uma expressão que é avaliada como um inteiro. |
_Group_(anno-list) |
As anotações em anno-list são todas consideradas como tendo qualquer qualificador que se aplique à anotação de grupo aplicada a cada anotação. |
_When_(expr, anno-list) |
expr é uma expressão que pode ser convertida em bool. Quando for diferente de zero (true), as anotações especificadas em anno-list são consideradas aplicáveis.Por padrão, para cada anotação em anno-list, expr é interpretado como usando os valores de entrada se a anotação for uma pré-condição, e como usando os valores de saída se a anotação for uma pós-condição. Para substituir o padrão, pode usar o _Old_ intrínseco ao avaliar uma pós-condição para indicar que os valores de entrada devem ser usados.
Observação: Anotações diferentes podem ser habilitadas como consequência do uso _When_ se um valor mutável — por exemplo, *pLength— estiver envolvido porque o resultado avaliado de expr em pré-condição pode diferir de seu resultado avaliado em pós-condição. |