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çã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. |