Condividi tramite


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.

[!NOTA]

Diverse annotazioni potrebbero essere abilitate come conseguenza dell'utilizzo di _When_ se è coinvolto un valore mutabile—ad esempio, *pLength—poiché il risultato di valutazione di expr in precondizione, può essere diverso da quello valutato in post-condizione.

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

Funzioni intrinseche

Suggerimenti ed esempi (SAL)

Concetti

Informazioni su SAL

Altre risorse

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