Condividi tramite


Annotazione del comportamento delle funzioni

Oltre ad annotare parametri di funzione e valori restituiti, è possibile annotare le proprietà dell'intera funzione.

Annotazioni di funzione

Le seguenti annotazioni si applicano all'intera funzione e descrivono come si comporta o cosa si aspetta per essere true.

Annotazione

Descrizione

_Called_from_function_class_(name)

Non inteso singolarmente; invece, è un predicato da utilizzare con l'annotazione _When_.Per ulteriori informazioni, vedere Specificare dove e quando applicare un'annotazione.

Il parametro name è una stringa arbitraria che appare in un'annotazione di _Function_class_ nella dichiarazione di funzioni. Restituisce _Called_from_function_class_ diverso da zero se la funzione attualmente analizzata viene annotata con _Function_class_ che ha lo stesso valore di name; in caso contrario, restituisce zero.

_Check_return_

Annota un valore restituito e dichiara che il chiamante dovrebbe esaminarlo.Il verificatore segnala un errore se la funzione viene chiamata in un contesto void.

_Function_class_(name)

Il parametro name è una stringa arbitraria definita dall'utente. Esiste in uno spazio dei nomi distinto da tutti gli altri spazi dei nomi.Una funzione, il puntatore a funzione, o—più utilmente— un tipo puntatore a funzione possono essere definiti come appartenenti a una o più classi di funzione.

_Raises_SEH_exception_

Annota una funzione che solleva sempre una gestione strutturata delle eccezioni, soggetta alle condizioni _When_ e _On_failure_.Per ulteriori informazioni, vedere Specificare dove e quando applicare un'annotazione.

_Maybe_raises_SEH_exception_

Annota una funzione che può eventualmente sollevare un eccezione SEH, soggetta alle condizioni _When_ e _On_failure_.

_Must_inspect_result_

Annota un qualsiasi valore di output, compreso il valore restituito, i parametri e i globals. L'analizzatore segnala un errore se il valore dell'oggetto annotato non è controllato in seguito. "L'ispezione" include se è utilizzata in un'espressione condizionale, viene assegnata a un parametro di output o globale, o passata come parametro. Per i valori restituiti, _Must_inspect_result_ implica _Check_return_.

_Use_decl_annotations_

Può essere utilizzato in una definizione di funzione (nota anche come corpo della funzione) anziché l'elenco delle annotazioni nell'intestazione. Quando _Use_decl_annotations_ viene utilizzato, le annotazioni visualizzate su un'intestazione nell'ambito per la stessa funzione vengono utilizzate come se fossero inoltre presenti nella definizione con l'annotazione di _Use_decl_annotations_.

Annotazioni di successo o errore

Una funzione può non riuscire e quando questo accade, i risultati possono essere incompleti o differire dai risultati della funzione quando ha esito positivo. Le annotazioni nell'elenco seguente forniscono le modalità per esprimere il comportamento dell'errore. Per utilizzare ognuna di queste annotazioni, è necessario consentire loro di determinare l'esito positivo; pertanto è necessaria un'annotazione _Success_. Si noti che NTSTATUS e HRESULT già dispongono di un'annotazione di _Success_ compilata in esse; tuttavia, se si specifica una propria annotazione di _Success_ su NTSTATUS o su HRESULT, eseguire l'override dell'annotazione incorporata.

Annotazione

Descrizione

_Always_(anno_list)

Equivalentemente a anno_list _On_failure_(anno_list), le annotazioni in anno_list si applicano indipendentemente se la funzione ha o no esito positivo.

_On_failure_(anno_list)

Per essere utilizzato solo quando _Success_ viene utilizzato anche per annotare la funzione—esplicitamente, o implicitamente mediante _Return_type_success_ su un typedef.Quando l'annotazione _On_failure_ è presente in un parametro di funzione o un valore restituito, ciascuna annotazione in anno_list (anno) si comporta come se fosse codificata come _When_(!expr, anno), dove expr è il parametro dell'annotazione richiesta _Success_.Ciò significa che l'applicazione implicita di _Success_ a tutte le post-condizioni non è applicabile per _On_failure_.

_Return_type_success_(expr)

Può essere applicato a un typedef.Indica che tutte le funzioni che restituiscono quel tipo e non hanno _Success_ sono contrassegnate come se avessero _Success_(expr)._Return_type_success_ non può essere utilizzato in una funzione o nel puntatore a funzione typedef.

_Success_(expr)

expr è un'espressione che produce un rvalue.Quando l'annotazione _Success_ è presente in una dichiarazione di funzione o una definizione, ciascuna annotazione (anno) nella funzione e in post-condizione, si comporta come se fosse codificata come _When_(expr, anno).L'annotazione _Success_ può essere utilizzata solo su una funzione, non sui relativi parametri o sul tipo restituito.Potrebbe contenere al massimo un'annotazione _Success_ su una funzione e non può essere all'interno di qualsiasi _When_, _At_, o _Group_.Per ulteriori informazioni, vedere Specificare dove e quando applicare un'annotazione.

Vedere anche

Riferimenti

Annotazione di parametri di funzione e valori restituiti

Annotazioni di struct e classi

Annotazione del comportamento di blocco

Specificare dove e quando applicare un'annotazione

Funzioni intrinseche

Suggerimenti ed esempi (SAL)

Concetti

Informazioni su SAL

Altre risorse

Utilizzo delle annotazioni SAL per ridurre gli errori del codice C/C++