Partager via


Annotation du comportement d'une fonction

Outre l'annoter paramètres de fonction et valeurs de retour, vous pouvez annoter les propriétés de la fonction entière.

Annotations de fonction

Les annotations suivantes s'appliquent à la fonction dans son ensemble et décrivent comment elle se comporte ou ce qu'elle compte être true.

Annotation

Description

_Called_from_function_class_(name)

(Non conçu à autonome ; à la place, il s'agit d'un attribut à utiliser avec l'annotation d' _When_ .Pour plus d'informations, consultez Spécification du moment où une annotation est applicable et dans quel cas.

Le paramètre d' name est une chaîne arbitraire qui s'affiche également dans une annotation d' _Function_class_ dans la déclaration de certaines fonctions. _Called_from_function_class_ retourne une valeur différente de zéro si la fonction actuellement est analysée est annotée à l'aide de _Function_class_ qui a la même valeur d' name; sinon, il retourne zéro.

_Check_return_

Annote une valeur de retour et indique que l'appelant doit l'examiner.Le vérificateur signale une erreur si la fonction est appelée dans un contexte void.

_Function_class_(name)

Le paramètre d' name est une chaîne arbitraire qui est indiquée par l'utilisateur.Il existe dans un espace de noms qui est distinct d'autres espaces de noms.Une fonction, un pointeur fonction, ou) est un type de pointeur fonction d'usefully-a peuvent être désignés comme appartenance à un ou plusieurs classes de fonction.

_Raises_SEH_exception_

Annote une fonction qui déclenche toujours une exception structurée de (SEH) de gestionnaire d'exceptions, en fonction de _When_ et des états d' _On_failure_ .Pour plus d'informations, consultez Spécification du moment où une annotation est applicable et dans quel cas.

_Maybe_raises_SEH_exception_

Annote une fonction qui peut éventuellement élever l'exception, en fonction de _When_ et des états d' _On_failure_ .

_Must_inspect_result_

Annote toute valeur de sortie, notamment la valeur de retour, les paramètres, et les globals.L'analyseur signale une erreur si la valeur de l'objet annoté n'est pas ensuite révisée. "L'inspection » inclut si elle est utilisée dans une expression conditionnelle, est assignée à un paramètre de sortie ou global, ou est passée comme paramètre.Pour les valeurs de retour, _Must_inspect_result_ implique _Check_return_.

_Use_decl_annotations_

Peut être utilisé dans une définition de fonction (également appelé un corps de fonction) à la place de la liste des annotations dans l'en-tête. Lorsque _Use_decl_annotations_ est utilisé, les annotations qui s'affichent sur un en-tête dans la portée pour la même fonction sont utilisées comme si elles sont également présentes dans la définition qui a l'annotation d' _Use_decl_annotations_ .

Annotations de réussite ou échec

Une fonction peut échouer, et lorsqu'il fait, ses résultats peuvent être incomplets ou différer des résultats lorsque la fonction réussit.Les annotations dans la liste suivante fournit des méthodes pour exprimer le comportement d'échec.Pour utiliser ces annotations, vous devez leur permettre de déterminer la réussite ; par conséquent, une annotation de _Success_ est requise.Notez qu' NTSTATUS et HRESULT ont déjà une annotation de _Success_ intégrée à eux ; toutefois, si vous spécifiez votre propre annotation d' _Success_ sur NTSTATUS ou HRESULT, elle remplace l'annotation prédéfinie.

Annotation

Description

_Always_(anno_list)

Équivalent à anno_list _On_failure_(anno_list); autrement dit, les annotations dans anno_list s'appliquent si la fonction réussit.

_On_failure_(anno_list)

Pour être utilisé uniquement lorsque _Success_ est également utilisé pour annoter les fonctions le soit explicitement, ou implicitement par _Return_type_success_ sur un typedef.Lorsque l'annotation d' _On_failure_ est présente sur un paramètre de fonction ou de valeur de retour, chaque annotation en anno_list (anno) se comporte comme s'il était codés en _When_(!expr, anno), où expr est le paramètre à l'annotation requise pour _Success_ .Cela signifie que l'application implicite d' _Success_ à toutes les conditions après ne s'applique pas pour _On_failure_.

_Return_type_success_(expr)

Peut être appliquée à un typedef.Indique que toutes les fonctions qui retournent ce type et n'ont pas explicitement _Success_ sont annotées comme si elles avaient _Success_(expr)._Return_type_success_ ne peut pas être utilisé sur une fonction ou un typedef de pointeur fonction.

_Success_(expr)

expr est une expression qui référence une valeur rvalue.Lorsque l'annotation d' _Success_ est présente sur une déclaration de fonction ou une définition, chaque annotation (anno) dans la fonction et d'après la condition se comporte comme si elle était codées en _When_(expr, anno).L'annotation de _Success_ peut être utilisée uniquement sur une fonction, pas sur ses paramètres ou type de retour.Il peut y avoir au plus une annotation de _Success_ sur une fonction, et il ne peut pas être dans un _When_, _At_, ou _Group_.Pour plus d'informations, consultez Spécification du moment où une annotation est applicable et dans quel cas.

Voir aussi

Référence

Annotation de paramètres de fonction et valeurs de retour

Structs et classes d'annotation

Annotation du comportement de verrouillage

Spécification du moment où une annotation est applicable et dans quel cas

Fonctions intrinsèques

Meilleures pratiques et exemples (SAL)

Concepts

Présentation de SAL

Autres ressources

Utilisation d'annotations SAL pour réduire les défauts du code C/C++