Visão geral de anotação

Anotações permitem as funções declarar o comportamento explicitamente. Desenvolvedores podem incorporar anotações funcionais em seus códigos-fonte para declarar explicitamente os contratos entre Implementações (receptor) e Clientes (chamador). A ferramenta de análise de código usa as informações adicionais sobre as condições dos parâmetros de função e tipos de retorno antes e depois que a função é chamada para detectar violações do contrato entre o chamador e o receptor. Se você especificar anotações sobre a declaração da função então você não tem de especificá-los sobre a definição da função.

Atributos

O esquema de anotação é implementado como atributos do compilador VC ++. Os seguintes dois atributos fornecem a base para anotação:

Pre

Cada instância de um atributo Pre especifica um conjunto de propriedades para o parâmetro com anotações. A anotação a seguir usa o atributo Pre com a propriedade Valid:

void f ( [ Pre (Valid = Yes) ] int pWidth);

Anotando o parâmetro pWidth, a função exige chamadores passar um valor inteiro válido. De um valor integral — ou ponto flutuante — significa que o parâmetro foi inicializado e não contém dados de lixo.

Post

Cada instância de um atributo Post especifica um conjunto de propriedades para o parâmetro com anotações ou valor de retorno. A anotação a seguir usa o atributo de Post com a MustCheck propriedade:

[returnvalue:Post(MustCheck=Yes)] bool f();

Anotando o valor de retorno de uma função, o chamador é necessário para examinar o valor de retorno da função; Portanto, uma chamada como a seguir gera C6031:

void main( )
{
  // code
  f ( ); // warning 6031
  // code 
}

Além os atributos Pre e Post, os dois seguintes atributos estão disponíveis:

  • O atributo FormatString é fornecido para especificar informações de formato. Ele é usado com a propriedade Style.

  • O atributo InvalidCheck é fornecido para determinar se um valor de retorno de uma função é válido ou inválido. Ele é usado com a propriedade Value.

Propriedades

Existem várias propriedades que podem ser especificadas com os atributos Pre e Post. Mesmo embora várias propriedades possam ser usadas em ambos atributos Pre e Post, a propriedade MustCheck pode ser aplicada apenas para valor de retorno da função e deve ser especificada com o atributo Post. Antes de usar uma propriedade específica, você deve ler a documentação para aprender sobre os tipos de atributos e dados suportados por ela. Para obter mais informações, consulte Propriedades de anotação.

Usando anotação em C

Para usar anotações em arquivos de origem C, inclua o seguinte arquivo:

#include <CodeAnalysis/SourceAnnotations.h>

Em seguida, anote a função como mostra o código a seguir:

void f ([ SA_Pre (Valid = SA_Yes) ] int pWidth );

Nota no código C, você deve usar o prefixo SA_ em atributos e valores enumerados.

Usando anotação em C++

No C++, após adicionar o #include <CodeAnalysis/SourceAnnotations.h> de arquivo, adicione o seguinte namespace:

using namespace vc_attributes;

Em seguida, anote a função como mostra o código a seguir:

void CMyClass::f ([ Pre (Valid = Yes) ] int pWidth )
ObservaçãoObservação

No código C++, você não tem de usar o SA_prefix para valores enumerados, por exemplo, Yes, No, e Maybe. Entretanto, você deve usar o SA_prefix em um cabeçalho que será usado tanto para código C e C++. Em C++, anotações não podem ser herdadas pela classe derivada.

Consulte também

Referência

C6031