Un programma che non è stato testato non funziona [Stroustrup – The C++ programming language].
Per facilitare la localizzazione di un problema è desiderabile avere delle istruzioni di controllo che stampano un messaggio a video nel caso in cui si verifichi una condizione errata a tempo di esecuzione.
E’ desiderabile che queste istruzioni di controllo non siano incluse nell’applicativo finale (aumentano le dimensioni dell’applicazione, ne rallentano l’esecuzione, etc.).
I linguaggi C e C++ offrono una soluzione migliore, costituita dalla macro assert() (definita in assert.h o cassert).
Una asserzione è un’affermazione relativa ad una condizione che deve essere vera.
Se la condizione è vera, la assert() non fa nulla.
Altrimenti, viene generato un messaggio di errore e viene chiamata abort(), che termina il programma.
Il codice dell’esempio precedente può essere così riscritto
assert(p);
*p = 10;
Come si fa a generare il programma escludendo le asserzioni?
assert(p);
*p = 10;
E’ sufficiente definire (nei moduli che includono le assert() o come opzione del compilatore) la macro NDEBUG.
La assert() è infatti definita in maniera diversa a seconda che la macro NDEBUG sia definita o meno.
La macro assert()
Tuttavia, la macro assert() termina il programma in caso di condizione non verificata
Per gestire le situazioni di errore, è preferibile usare il meccanismo delle eccezioni.
1. Strutture e typedef. Record in C/C++: Concetti Base
4. Puntatori a tipi di dato strutturati. Allocazione Dinamica
5. Puntatori: aspetti avanzati
7. Asserzioni
8. Gestione delle eccezioni. Concetti base
9. Programmazione modulare: concetti base
10. Programmazione Modulare: Meccanismi e Strumenti a supporto in C/C++
12. Esercitazione: Strutture Dati Pila e Coda
13. Esercitazione. Strutture Dati: Lista Concatenata
14. Meccanismi di Incapsulamento in C++ Namespaces
15. Programmazione orientata agli oggetti. Introduzione