Annotazione del comportamento della funzione
Oltre a annotare i parametri della funzione e i 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 il valore previsto per restituire true.
Annotazione | Descrizione |
---|---|
_Called_from_function_class_(name) |
Non inteso singolarmente; è un predicato da utilizzare con l'annotazione _When_ . Per altre informazioni, vedere Specifica di quando e dove si applica un'annotazione.Il name parametro è una stringa arbitraria che viene visualizzata anche in un'annotazione _Function_class_ nella dichiarazione di alcune funzioni. _Called_from_function_class_ restituisce un valore diverso da zero se la funzione attualmente analizzata viene annotata usando _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 deve esaminarlo. La verifica restituisce 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, un puntatore a funzione o, più utile, un tipo di puntatore a funzione può essere definito come appartenente a una o più classi di funzione. |
_Raises_SEH_exception_ |
Annota una funzione che genera sempre un'eccezione del gestore eccezioni strutturate soggetta alle condizioni _When_ e _On_failure_ . Per altre informazioni, vedere Specifica di quando e dove si applica un'annotazione. |
_Maybe_raises_SEH_exception_ |
Annota una funzione che può facoltativamente generare un'eccezione del gestore eccezioni strutturate soggetta alle condizioni _When_ e _On_failure_ . |
_Must_inspect_result_ |
Annota qualsiasi valore di output, incluso il valore restituito, i parametri e le globals. L'analizzatore segnala un errore se il valore dell'oggetto annotato non è controllato in seguito. "L'ispezione" include se viene utilizzata in un'espressione condizionale, viene assegnata a un parametro di output o globale o viene passata come parametro. Per i valori restituiti, _Must_inspect_result_ implica _Check_return_ . |
_Use_decl_annotations_ |
Può essere usato in una definizione di funzione (nota anche come corpo della funzione) al posto dell'elenco di annotazioni nell'intestazione. Quando _Use_decl_annotations_ viene usato, le annotazioni visualizzate in un'intestazione nell'ambito per la stessa funzione vengono usate come se fossero presenti anche nella definizione con l'annotazione _Use_decl_annotations_ . |
Annotazioni di esito positivo/negativo
Una funzione può non riuscire e, quando questo accade, i risultati possono essere incompleti o differire dai risultati della funzione con 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à includono un'annotazione _Success_
compilata. Tuttavia, se si specifica un'annotazione _Success_
in NTSTATUS
o HRESULT
, viene eseguito l'override dell'annotazione incorporata.
Annotazione | Descrizione |
---|---|
_Always_(anno_list) |
Analogamente a anno_list _On_failure_(anno_list) , le annotazioni in anno_list si applicano indipendentemente dall'esito della funzione. |
_On_failure_(anno_list) |
Da utilizzare solo quando si usa anche _Success_ per annotare la funzione, esplicitamente o implicitamente, mediante _Return_type_success_ in 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 _Success_ richiesta. Ciò significa che l'applicazione implicita di _Success_ per 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 includono _Success_ in modo esplicito, sono annotate come se includessero _Success_(expr) . _Return_type_success_ non può essere utilizzato in una funzione o in un typedef di puntatore a funzione. |
_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 in una funzione e non nei relativi parametri o nel tipo restituito. Ci può essere al massimo un'annotazione _Success_ in una funzione e non può trovarsi all'interno di qualsiasi _When_ , _At_ o _Group_ . Per altre informazioni, vedere Specifica di quando e dove si applica un'annotazione. |
Vedi anche
- Uso delle annotazioni SAL per ridurre gli errori del codice C/C++
- Informazioni su SAL
- 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