Specificare dove e quando applicare un'annotazione
Quando un'annotazione è condizionale, può richiedere ad altre annotazioni di specificarlo all'analizzatore. Ad esempio, se una funzione dispone di una variabile che può essere sincrona o asincrona, la funzione si comporta nel modo seguente: Nel caso sincrono ha sempre eventualmente esito positivo, ma in modo asincrono viene segnalato un errore se potrebbe non riuscire immediatamente.Quando la funzione viene chiamata in modo sincrono, controllare il valore di ritorno non fornisce alcun valore per l'analizzatore di codice, perché potrebbe non avere restituito alcun valore. Tuttavia, quando la funzione viene chiamata in modo asincrono e il risultato della funzione non è controllato, un errore grave può verificarsi.In questo esempio viene illustrata una situazione in cui è possibile utilizzare l'annotazione _When_ —descritta più avanti in questo articolo—per abilitate il controllo.
Annotazioni strutturali
Per controllare quando e dove le annotazioni vengono applicate, utilizzare le annotazioni strutturali seguenti.
Annotazione |
Descrizione |
---|---|
_At_(expr, anno-list) |
expr è un'espressione che produce un lvalue.Le annotazioni in anno-list si applicano all'oggetto denominato da expr.Ciascuna annotazione in anno-list, expr verrà interpretata in pre-condizione se la voce viene interpretata in pre-condizione ed in post-condizione se la voce viene interpretata in post-condizione. |
_At_buffer_(expr, iter, elem-count, anno-list) |
expr è un'espressione che produce un lvalue.Le annotazioni in anno-list si applicano all'oggetto denominato da expr.Ciascuna annotazione in anno-list, expr verrà interpretata in pre-condizione se la voce viene interpretata in precondizione ed in post-condizione se la voce viene interpretata in post-condizione. iter è il nome di una variabile con ambito annotazione (incluso anno-list).iter ha un tipo implicito long.Le variabili denominate identicamente, in qualsiasi ambito che lo contiene, sono nascoste dalla valutazione. elem-count è un'espressione che restituisce un Integer. |
_Group_(anno-list) |
Le annotazioni in anno-list dovrebbero contenere tutte qualche qualificatore che vale per il gruppo di annotazioni, applicato ad ogni annotazione. |
_When_(expr, anno-list) |
expr è un'espressione che può essere convertita in bool.Quando sono diverse da zero (true), le annotazioni specificate in anno-list sono considerate applicabili. Per impostazione predefinita, per ciascuna annotazione in anno-list, expr viene interpretato utilizzando i valori di input se l'annotazione è una precondizione, e i valori di output se l'annotazione è una post-condizione.Per eseguire l'override dell'impostazione predefinita, è possibile utilizzare _Old_ intrinsecamente quando viene valutata una post-condizione per indicare che i valori immessi devono essere utilizzati.
|
Vedere anche
Riferimenti
Annotazione di parametri di funzione e valori restituiti
Annotazione del comportamento delle funzioni
Annotazioni di struct e classi
Annotazione del comportamento di blocco
Concetti
Altre risorse
Utilizzo delle annotazioni SAL per ridurre gli errori del codice C/C++