Newsgroup: it.comp.lang.c
Titolo: #define

ho sentito spesso dire che e' cattiva abitudine includere o meno delle
funzionalita' in un programma in base a delle #define, cioe' fare in
parole povere una programmazione basata sulle #define (scusate il mio
modo d'esprimermi,ma spero che il concetto almeno sia chiaro 8-)
siete in accordo/disaccordo con quanto detto sopra?
friol

 parole povere una programmazione basata sulle #define (scusate il mio
Tutt'altro.
Un esempio:
#define __DEBUG_VERSION__
...
#ifdef __DEBUG_VERSION__
    printf ("Il valore della variabile è: %u", &a);
#endif
L'esempio è per versioni di debug, ma potrebbe essere utile per versioni di
prova (non includi certe funzionalità), per includere dei log di esecuzione
solo in certe versioni, o per mille altri motivi (anche, eventualmente, la
dipendenza dal SO).
Certo non conviene abusarne...
Uno dei problemi maggiori è che si complica di molto il codice, ed è facile
poi perdere il controllo su tutte le parti del programma.
--
Alessandro Monti

 #define __DEBUG_VERSION__
Illegale.  Tutti i simboli che iniziano con underscore sono riservati
all'implementazione.
-- 
Maurizio Loreti                         
http://www.pd.infn.it/~loreti/mlo.html
Univ. of Padova, Dept. of Physics - Padova, Italy            
lor...@pd.infn.it

 all'implementazione.
Ah si? E da quando? Comunque compila e ha sempre compilato. Inoltre era un
*doppio* underscore, sia finale che iniziale.
Inoltre credo che il "succo" del discorso fosse comunque chiaro, o no?
Ciao
--
Alessandro Monti

 Inoltre credo che il "succo" del discorso fosse comunque chiaro, o no?
Il succo si; ma perche' devi fare le cose in modo da rischiare, quando
puoi rispettare le convenzioni e andare sul sicuro?  Puoi anche
guidare l'auto sulla sinistra della strada, se vuoi --- in fondo e'
solo una convenzione, quella di stare a destra, e ci sono anche dei
paesi che hanno convenzioni differenti --- ma non ti lamentare se poi
ti succede qualcosa.


 siete in accordo/disaccordo con quanto detto sopra?
Il più grosso problema delle macro è che impediscono il controllo sui
tipi da parte del compilatore. Quindi se ci sono delle alternative
(const, inline, etc.) meglio utilizzarle.
EMG

> Ancora peggio.  Se guardi lo Standard ANSI/ISO al punto 7.1.3, vi
Quando cerchi le cose, non le trovi mai...
Va beh, mi fido. Ma la cosa mi è totalmente nuova. Sapevo che i compilatori
dovevano usare l'underscore per le loro definizioni interne, ma che ne fosse
proibito l'uso al programmatore, lo ignoravo.
D'ora in poi allora userò la forma prefissa:
#ifdef ALEX_DEBUG_VERSION
almeno così andare bene, o c'è qualcos'altro che non so ancora?
--
Alessandro Monti

Inoltre credo che il "succo" del discorso fosse comunque chiaro, o no?
Indubbiamente a volte l'uso delle #definizioni puo' risultare utile,
ma nel caso del C++, ad esempio, si tende ad utilizzarle il meno
possibile.
Il problema e' che se, a volte, possono risultare utili, altre volte
(es.: definizione di macro) nascondono parti di codice, potenziali
fonti di bug.
Come tutte le cose, esiste l'utilizzo corretto e quello scorretto.
--
Andrea Laforgia
andrea_...@bigfoot.com

almeno cosě andare bene, o c'č qualcos'altro che non so ancora?
Non so, sinceramente, se lo standard vieti o meno l'utilizzo del
doppio underscore da parte del programmatore.
--
Andrea Laforgia
andrea_...@bigfoot.com