Funções intrínsecas
Uma expressão na SAL pode ser uma expressão do C/C++, desde que seja uma expressão que não tenha efeitos colaterais; por exemplo, ++, --, e chamadas de função têm efeitos colaterais nesse contexto. No entanto, a SAL fornece alguns objetos semelhantes a funções e alguns símbolos reservados que podem ser usados em expressões da SAL. Elas são chamadas de funções intrínsecas.
Uso Geral
As anotações de função intrínseca a seguir fornecem utilidade geral para a SAL.
Anotação | Descrição |
---|---|
_Curr_ |
Um sinônimo para o objeto que está sendo anotado no momento. Quando a anotação _At_ está em uso, _Curr_ é a mesma que o primeiro parâmetro para _At_ . Caso contrário, será o parâmetro ou toda a função/todo o valor retornado com o qual a anotação está associada lexicalmente. |
_Inexpressible_(expr) |
Expressa uma situação em que o tamanho de um buffer é muito complexo para representar usando uma expressão de anotação; por exemplo, quando ele é calculado por meio do exame de um conjunto de dados de entrada e da contagem de membros selecionados. |
_Nullterm_length_(param) |
param é o número de elementos no buffer até um terminador nulo, mas sem incluí-lo. Ele pode ser aplicado a qualquer buffer de tipo não agregado e não nulo. |
_Old_(expr) |
Quando ele é avaliado em pré-condição, _Old_ retorna o valor de entrada expr . Quando ele é avaliado na pós-condição, ele retorna o valor expr como se tivesse sido avaliado em pré-condição. |
_Param_(n) |
O n ésimo parâmetro para uma função, contando de 1 até n , com n sendo uma constante integral literal. Se o parâmetro for nomeado, essa anotação será idêntica ao acesso ao parâmetro por nome. Observação: n pode se referir aos parâmetros posicionais definidos por reticências, ou pode ser usados em protótipos de funções em que os nomes não são usados. |
return |
A palavra-chave reservada return do C/C++ pode ser usada em uma expressão da SAL para indicar o valor retornado de uma função. O valor só estará disponível no pós-estado; usá-lo no pré-estado é um erro de sintaxe. |
Especificidades de cadeia de caracteres
As anotações de função intrínseca a seguir permitem a manipulação de cadeias de caracteres. Todas as quatro funções têm a mesma finalidade: retornar o número de elementos do tipo encontrado antes de um terminador nulo. As diferenças são os tipos de dados nos elementos que são referenciados. Observe que, se você quiser especificar o comprimento de um buffer terminado em nulo que não seja composto de caracteres, use a anotação _Nullterm_length_(param)
da seção anterior.
Anotação | Descrição |
---|---|
_String_length_(param) |
param é o número de elementos na cadeia de caracteres até um terminador nulo, mas sem incluí-lo. Essa anotação é reservada para tipos de cadeia de caracteres. |
strlen(param) |
param é o número de elementos na cadeia de caracteres até um terminador nulo, mas sem incluí-lo. Essa anotação é reservada para uso em matrizes de caracteres e é semelhante à função strlen() do Runtime do C. |
wcslen(param) |
param é o número de elementos na cadeia de caracteres até um terminador nulo (mas sem incluí-lo). Essa anotação é reservada para uso em matrizes de caracteres largos e é semelhante à função wcslen() do Runtime do C. |
Confira também
- Usando anotações de SAL para reduzir defeitos de código do C/C++
- Noções básicas de 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
- Especificando quando e onde uma anotação se aplica
- Práticas recomendadas e exemplos