[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [home] [volume] [parte]


Capitolo 590.   C: «assert.h»

Il file assert.h della libreria standard definisce la macro-istruzione assert(), da usare per generare informazioni diagnostiche, sulla base dell'esito della valutazione di un'espressione.

La macro-istruzione assert() viene definita in due modi alternativi, in base alla presenza o meno della macro-variabile NDEBUG. Per la precisione, in presenza della macro-variabile NDEBUG la macro-istruzione assert() deve risultare inerte.

#include <stdio.h>
#ifdef NDEBUG
#define assert(ignore) ((void)0)
#else
#define assert(ASSERTION) ({if ((ASSERTION)==0)                            \
                            fprintf (stderr,                               \
                                     "Assertion failed: " # ASSERTION      \
                                     ", function %s, file %s, line %u.\n", \
                                     __func__, __FILE__, __LINE__);})
#endif

590.1   Utilizzo

La macro-istruzione assert() va usata con la sintassi seguente, dove il parametro indica un'espressione di tipo non specificato, purché di tipo scalare:

void assert (tipo_scalare espressione);

Se l'espressione si traduce in un valore Falso, ovvero pari a zero, la macro-istruzione emette, attraverso lo standard error, un messaggio contenente l'espressione stessa e altre indicazioni. Precisamente, oltre all'espressione deve apparire: il nome della funzione in cui ci si trova, il nome del file (sorgente) e il numero della riga.

Tuttavia, se la macro-variabile risulta definita, prima dell'inclusione del file assert.h, la macro-istruzione assert() deve essere trasformata dal compilatore come un'istruzione inerte, ovvero l'equivalente di ((void) 0).

Segue un l'esempio di un programma completo in cui si utilizza assert():

#include <stdio.h>
int
main (int argc, char *argv[])
{
    assert (123==124);
    return 0;
}

L'espressione verificata da assert() non può essere vera, pertanto, se non è stata dichiarata la macro-variabile NDEBUG, questo programma dovrebbe produrre un messaggio come quello seguente:

Assertion failed: 123==124, function main, file assert.c, line 5.

590.2   Riferimenti


Appunti di informatica libera 2008 --- Copyright © 2000-2008 Daniele Giacomini -- <appunti2 (ad) gmail·com>


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome c_171_assert_h_187.htm

[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [home]

Valid ISO-HTML!

CSS validator!

Gjlg Metamotore e Web Directory