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 informação adicional fornecida pelo o desenvolvedor sobre as condições Pre e Post dos parâmetros das funções e tipos de retorno é usada pela ferramenta de análise de código 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 para 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 seguinte usa o atributo POST com a MustCheck propriedade:
[returnvalue:Post(MustCheck=Yes)] bool f();
Anotando o valor retornado de uma função, o chamador é necessário para examinar o valor retornado da função; portanto, uma telefonar 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 );
Observação: 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> arquivo, adicione o namespace seguinte:
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çã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. |