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 que são definidos por reticências ou que podem ser usados em protótipos de função em que 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