Assert.h: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
sostituito template titolo errato con template titolo minuscolo |
sistemo e semplifico |
||
(15 versioni intermedie di 12 utenti non mostrate) | |||
Riga 2:
{{titolo minuscolo}}
'''assert.h''' è
== Descrizione ==
{| class="wikitable"
|- bgcolor=#e9e9e9
! Nome || Descrizione
Line 14 ⟶ 15:
|}
L'utilità della macro <code>assert()</code> risiede nella semplicità con la quale si può verificare un'affermazione che si ritiene, in un dato contesto, banalmente ovvia: ad esempio, ricontrollare il valore di una variabile sulla quale si sono già effettuate delle verifiche. Nel codice che segue, la macro <code>assert()</code> viene utilizzata per controllare che il valore della variabile "scelta" sia effettivamente compreso nel range valido, nonostante l'uscita dal ciclo while implicitamente affermi la veridicità di questa condizione.
<syntaxhighlight lang="c" line="1">
}
▲ /* Visualizzo un menu con 4 scelte numerate da 1 a 4 */
▲ scanf("%d", &scelta);
</syntaxhighlight>
▲ assert(scelta>=1 && scelta <=4);
▲ /* Secondo blocco di operazioni eseguite in base al valore scelto */
Utilizzando <code>assert()</code>, il programmatore si accerta nuovamente che la condizione che aveva provocato l'uscita dal ciclo while sia ancora vera: in questo caso, ad esempio, verifica di non aver accidentalmente modificato il valore della variabile <code>scelta</code> all'interno del primo blocco di operazioni.
L'utilizzo di <code>assert()</code> dovrebbe essere limitato alla sola fase di sviluppo di un programma. Infatti, la mancanza di verifica dell'asserzione provoca l'interruzione immediata dell'applicazione fornendo scarse informazioni in merito all'errore, anche se può essere usato l'[[operatore virgola]] per aggiungere informazioni all'espressione stampata, come in <code>assert(("2+2 fa 4", 2 + 2 == 5));</code>. Inoltre, la macro non dovrebbe essere adoperata in casi in cui ci sia una seppur piccola probabilità di fallimento, ad esempio in un'[[allocazione dinamica della memoria]]:<syntaxhighlight lang="c">
</syntaxhighlight>
Quando il programmatore non ha più bisogno delle asserzioni, invece di eliminarle tutte manualmente può definire la costante <code>NDEBUG</code> prima di includere nel file sorgente l'header <code>assert.h</code>: in questo modo, la macro <code>assert()</code> viene espansa semplicemente in: <code>#define assert(ignore)((void) 0)</code>, eliminando quindi ogni possibile interazione con il programma. Dunque, in presenza di <code>NDEBUG</code> eventuali espressioni passate a <code>assert()</code> non verranno valutate.▼
▲Quando il programmatore non ha più bisogno delle asserzioni, invece di eliminarle tutte manualmente può definire la costante <code>NDEBUG</code> prima di includere nel file sorgente l'header <code>assert.h</code>: in questo modo, la macro <code>assert()</code> viene espansa semplicemente in:
== Voci correlate ==
Line 51 ⟶ 46:
{{interprogetto|b=C/Appendice/Librerie standard}}
== Collegamenti esterni ==
[[Categoria:Libreria standard del C]]▼
* {{en}} [http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/assert.h.html assert.h] da The Open Group Base Specifications Issue 7
* {{cita web|https://www.gnu.org/software/libc/manual/html_node/Consistency-Checking.html|Consistency Checking - The GNU C Library|lingua=en}}
* {{cita web|1=http://www.cplusplus.com/reference/clibrary/cassert/|2=C Diagnostics Library|lingua=en|accesso=3 luglio 2012|dataarchivio=21 giugno 2012|urlarchivio=https://web.archive.org/web/20120621043500/http://www.cplusplus.com/reference/clibrary/cassert/|urlmorto=sì}}
* [https://web.archive.org/web/20101124224627/http://appuntilinux.mirror.garr.it/mirrors/appuntilinux/a2/a295.htm#almltitle4039 69.2 File «assert.h»] da [[Appunti di informatica libera]]
▲[[Categoria:Libreria standard del C]]
|