Fonctions intrinsèques
Une expression dans SAL peut être une expression C/C++ fournie qu’il s’agit d’une expression qui n’a pas d’effets secondaires( par exemple, ++, --, et les appels de fonction ont tous des effets secondaires dans ce contexte. Toutefois, SAL fournit des objets de type fonction et des symboles réservés qui peuvent être utilisés dans les expressions SAL. Ces fonctions sont appelées fonctions intrinsèques.
Usage général
Les annotations de fonction instrinsique suivantes fournissent un utilitaire général pour SAL.
Annotation | Description |
---|---|
_Curr_ |
Synonyme de l’objet actuellement annoté. Lorsque l’annotation _At_ est en cours d’utilisation, _Curr_ est identique au premier paramètre à _At_ . Sinon, il s’agit du paramètre ou de la valeur de retour/fonction entière avec laquelle l’annotation est associée lexicalement. |
_Inexpressible_(expr) |
Exprime une situation où la taille d’une mémoire tampon est trop complexe à représenter à l’aide d’une expression d’annotation, par exemple lorsqu’elle est calculée en analysant un jeu de données d’entrée, puis en comptant les membres sélectionnés. |
_Nullterm_length_(param) |
param est le nombre d’éléments dans la mémoire tampon jusqu’à ce qu’ils n’incluent pas un terminateur Null. Elle peut être appliquée à n’importe quelle mémoire tampon de type non agrégé, non void. |
_Old_(expr) |
Lorsqu’elle est évaluée en condition préalable, _Old_ retourne la valeur expr d’entrée . Lorsqu’elle est évaluée après condition, elle retourne la valeur expr telle qu’elle aurait été évaluée en condition préalable. |
_Param_(n) |
Le n ième paramètre d’une fonction, comptant de 1 à n , est n une constante intégrale littérale. Si le paramètre est nommé, cette annotation est identique à l’accès au paramètre par nom. Remarque :n peut faire référence aux paramètres positionnels définis par des points de suspension ou être utilisés dans les prototypes de fonction où les noms ne sont pas utilisés. |
return |
Le mot clé return réservé C/C++ peut être utilisé dans une expression SAL pour indiquer la valeur de retour d’une fonction. La valeur est disponible uniquement dans l’état post- ; il s’agit d’une erreur de syntaxe pour l’utiliser dans un état antérieur. |
Spécifique à la chaîne
Les annotations de fonction intrinsèques suivantes permettent la manipulation de chaînes. Les quatre fonctions suivantes servent le même objectif : pour renvoyer le nombre d’éléments du type trouvé avant un terminateur Null. Les différences sont les types de données dans les éléments auxquels il est fait référence. Notez que si vous souhaitez spécifier la longueur d’une mémoire tampon terminée par null qui n’est pas composée de caractères, utilisez l’annotation _Nullterm_length_(param)
de la section précédente.
Annotation | Description |
---|---|
_String_length_(param) |
param est le nombre d’éléments de la chaîne jusqu’à ce qu’il n’inclue pas un terminateur Null. Cette annotation est réservée aux types chaîne de caractères. |
strlen(param) |
param est le nombre d’éléments de la chaîne jusqu’à ce qu’il n’inclue pas un terminateur Null. Cette annotation est réservée pour une utilisation sur les tableaux de caractères et ressemble à la fonction C Runtime strlen(). |
wcslen(param) |
param est le nombre d’éléments de la chaîne jusqu’à (mais pas inclus) d’un terminateur Null. Cette annotation est réservée à une utilisation sur des tableaux de caractères larges et ressemble à la fonction C Runtime wcslen(). |
Voir aussi
- Utilisation d’annotations SAL pour réduire les défauts du code C/C++
- Présentation de SAL
- Annotation des paramètres de fonction et des valeurs de retour
- Annotation du comportement d’une fonction
- Annotations des structs et des classes
- Annotation du comportement de verrouillage
- Spécification du moment et de l’endroit où une annotation s’applique
- Bonnes pratiques et exemples
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour