>>>>> On Tue, 1 May 2001 19:03:37 +0200, Mario Torre <mario.torre@xxxxxxxxxxxx> >>>>> said: MT> On Friday 20 April 2001 17:50, Lele Gaifax wrote: AC> stesso modulo = >> Pur essendo contrario di principio alle variabili locali, >> credo siano molto adatte a questo scopo: >> <snip> MT> Con un poco di ritardo... MT> Non e' come lavora la variabile errno della libreria standard MT> del C? Si, certo: in quel caso si usa appunto una variabile globale, con la sua facilità d'uso e comprensione, ma anche con la sua "staticità": rende impossibile fare alcune cose, come modificare la gestione degli errori (immagina di voler fare un log di ogni errore di un certo tipo...). Al contrario, utilizzando una coppia di funzioni SetError/GetLastError avrai la possibilità di definire delle macro in C, che ad esempio segnalino *anche* in che funzione e linea, tipo #define SetError(code) { (SetError)(code); \ set_error_location (__FILE__, __LINE__); } che maschera la funzione `SetError' con una macro, che non fa altro che eseguire la vera funzione e chiamarne un'altra per memorizzare la posizione dell'errore... Oppure agire in modo particolare quando il tuo codice, per qualche motivo, andasse a "sovrascrivere" una condizione di errore senza averla letta: void MySetError (int code) { if ((code <> 0) && (GetLastError() <> 0)) EsprimiDisagio (...); SetError (code); } int MyGetLastError() { int e = GetLastError(); if (e <> 0) MySetError (0); return e; } #define SetError(e) MySetError(e) #define GetLastError MyGetLastError Spero di aver chiarito la versatilità del metodo... ciao, lele. -- nickname: Lele Gaifax | Quando vivro' di quello che ho pensato ieri real: Emanuele Gaifas | comincero' ad aver paura di chi mi copia. email: lele@xxxxxxxxxx | -- Fortunato Depero, 1929. -- Per iscriversi (o disiscriversi), basta spedire un messaggio con SOGGETTO "subscribe" (o "unsubscribe") a mailto:linuxtrent-request@xxxxxxxxxxxxxxxxx