Delen via


Gedrag van functies annoteren

Naast het toevoegen van aantekeningen aan functieparameters en retourwaarden, kunt u aantekeningen maken op eigenschappen van de hele functie.

Functieaantekeningen

De volgende aantekeningen zijn van toepassing op de functie als geheel en beschrijven hoe deze zich gedraagt of wat verwacht dat deze waar is.

Aantekening Beschrijving
_Called_from_function_class_(name) Niet bedoeld om zelfstandig te zijn; In plaats daarvan is het een predicaat dat moet worden gebruikt met de _When_ aantekening. Zie Opgeven wanneer en waar een aantekening van toepassing is voor meer informatie.

De name parameter is een willekeurige tekenreeks die ook wordt weergegeven in een _Function_class_ aantekening in de declaratie van sommige functies. _Called_from_function_class_ retourneert niet-nul als de functie die momenteel wordt geanalyseerd, wordt geannoteerd met behulp van _Function_class_ met dezelfde waarde als name; anders retourneert het nul.
_Check_return_ Maakt aantekeningen bij een retourwaarde en geeft aan dat de aanroeper deze moet inspecteren. De controle rapporteert een fout als de functie wordt aangeroepen in een ongeldige context.
_Function_class_(name) De name parameter is een willekeurige tekenreeks die door de gebruiker wordt aangewezen. Deze bestaat in een naamruimte die verschilt van andere naamruimten. Een functie, functiepointer of — het nuttigst — een functiepointertype kan worden aangewezen als behorend tot een of meer functieklassen.
_Raises_SEH_exception_ Annoteren van een functie die altijd een SEH-uitzondering (Structured Exception Handler) genereert, onderhevig aan _When_ en _On_failure_ voorwaarden. Zie Opgeven wanneer en waar een aantekening van toepassing is voor meer informatie.
_Maybe_raises_SEH_exception_ Annotaties maken van een functie die eventueel een SEH-uitzondering kan genereren, onderhevig aan _When_ en _On_failure_ voorwaarden.
_Must_inspect_result_ Annoteert elke outputwaarde, inclusief de retourwaarde, parameters en globale variabelen. De analyse rapporteert een fout als de waarde in het geannoteerde object vervolgens niet wordt geïnspecteerd. 'Inspectie' omvat of deze wordt gebruikt in een voorwaardelijke expressie, is toegewezen aan een uitvoerparameter of globaal, of wordt doorgegeven als een parameter. Voor retourwaarden impliceert _Must_inspect_result_ u _Check_return_.
_Use_decl_annotations_ Kan worden gebruikt voor een functiedefinitie (ook wel een functietekst genoemd) in plaats van de lijst met aantekeningen in de koptekst. Wanneer _Use_decl_annotations_ wordt gebruikt, worden de aantekeningen die verschijnen op een relevante header voor een functie gebruikt alsof ze ook aanwezig zijn in de definitie met de _Use_decl_annotations_ aantekening.

Geslaagde/mislukte aantekeningen

Een functie kan mislukken en wanneer dit het geval is, kunnen de resultaten onvolledig zijn of verschillen van de resultaten wanneer de functie slaagt. De aantekeningen in de volgende lijst bieden manieren om het foutgedrag uit te drukken. Als u deze aantekeningen wilt gebruiken, moet u deze inschakelen om succes te bepalen; daarom is een _Success_ aantekening vereist. U ziet dat NTSTATUS en HRESULT al een _Success_-aantekening ingebouwd hebben; als u echter uw eigen _Success_-aantekening opgeeft op NTSTATUS of HRESULT, wordt de ingebouwde aantekening overschreven.

Aantekening Beschrijving
_Always_(anno_list) Gelijk aan anno_list _On_failure_(anno_list); dat wil zeggen: de annotaties in anno_list zijn van toepassing, ongeacht of de functie slaagt.
_On_failure_(anno_list) Alleen gebruiken wanneer _Success_ ook wordt gebruikt om de functie te annoteren—hetzij expliciet, of impliciet via _Return_type_success_ op een typedef. Wanneer de _On_failure_ aantekening aanwezig is op een functieparameter of retourwaarde, gedraagt elke aantekening in anno_list (anno) zich alsof deze is gecodeerd als _When_(!expr, anno), waar expr is de parameter voor de vereiste _Success_ annotatie. Dit betekent dat de impliciete toepassing van _Success_ op alle postvoorwaarden niet van toepassing is voor _On_failure_.
_Return_type_success_(expr) Kan worden toegepast op een typedef. Geeft aan dat alle functies die dat type retourneren en die niet expliciet _Success_ hebben, zijn geannoteerd alsof ze _Success_(expr) hebben. _Return_type_success_ kan niet worden gebruikt voor een functie of een functiepointertypedef.
_Success_(expr) expr is een expressie die een rvalue oplevert. Wanneer de _Success_ aantekening aanwezig is in een functiedeclaratie of definitie, gedraagt elke aantekening (anno) van de functie en in een postvoorwaarde zich alsof deze is gecodeerd als _When_(expr, anno). De _Success_ aantekening kan alleen worden gebruikt voor een functie, niet voor de parameters of het retourtype. Er kan maximaal één _Success_-aantekening op een functie zijn, en deze kan niet in een _When_, in een _At_, of in een _Group_ staan. Zie Opgeven wanneer en waar een aantekening van toepassing is voor meer informatie.

Zie ook