Specificare dove e quando applicare un'annotazione

Quando un'annotazione è condizionale, può richiedere altre annotazioni per specificare che per l'analizzatore. Ad esempio, se una funzione ha una variabile che può essere sincrona o asincrona, la funzione si comporta come segue: nel caso sincrono, alla fine ha sempre esito positivo, ma nel caso asincrono segnala un errore se non riesce immediatamente. Quando la funzione viene chiamata in modo sincrono, il controllo del valore del risultato non fornisce alcun valore all'analizzatore del codice perché non verrebbe restituito. Tuttavia, quando la funzione viene chiamata in modo asincrono e il risultato della funzione non viene controllato, potrebbe verificarsi un errore grave. Questo esempio illustra una situazione in cui è possibile usare l'annotazione _When_ , descritta più avanti in questo articolo, per abilitare il controllo.

Annotazioni strutturali

Per controllare quando e dove si applicano le annotazioni, utilizzare le annotazioni strutturali seguenti.

Annotazione Descrizione
_At_(expr, anno-list) expr è un'espressione che restituisce un lvalue. Le annotazioni in anno-list vengono applicate all'oggetto denominato da expr. Per ogni annotazione in anno-list, expr viene interpretata in condizione preliminare se l'annotazione viene interpretata in pre-condizione e in post-condizione se l'annotazione viene interpretata in post-condizione.
_At_buffer_(expr, iter, elem-count, anno-list) expr è un'espressione che restituisce un lvalue. Le annotazioni in anno-list vengono applicate all'oggetto denominato da expr. Per ogni annotazione in anno-list, expr viene interpretata in condizione preliminare se l'annotazione viene interpretata nella precondizione e in post-condizione se l'annotazione viene interpretata in post-condizione.

iter è il nome di una variabile con ambito per l'annotazione (incluso di anno-list). iter ha un tipo longimplicito . Le variabili denominate in modo identico in qualsiasi ambito di inclusione sono nascoste dalla valutazione.

elem-count è un'espressione che restituisce un numero intero.
_Group_(anno-list) Le annotazioni in anno-list sono considerate tutte qualificanti applicabili all'annotazione di gruppo applicata a ogni annotazione.
_When_(expr, anno-list) expr è un'espressione che può essere convertita in bool. Quando è diverso da zero (true), le annotazioni specificate in anno-list vengono considerate applicabili.

Per impostazione predefinita, per ogni annotazione in anno-list, expr viene interpretato come usando i valori di input se l'annotazione è una precondizione e come usare i valori di output se l'annotazione è una post-condizione. Per eseguire l'override dell'impostazione predefinita, è possibile usare l'intrinseco _Old_ quando si valuta una post-condizione per indicare che è necessario usare i valori di input. Nota: è possibile abilitare annotazioni diverse come conseguenza dell'uso _When_ di se un valore modificabile, ad esempio , *pLengthè coinvolto perché il risultato valutato della expr precondizione può differire dal risultato valutato in post-condizione.

Vedi anche