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

salve,
volevo sapere se č corretto fare ciň:
==============
#define max 20;
int vettore1[max]; //questo sicuramente corretto
int vettore2[max+1]; //questo non so
int vettore3[max*2]; //idem come sopra non so...perň presumo se quello sopra
č corretto....
Il compilatore non da errore ... e esegue...il programma sembra corretto
perň č stato veramente passato 21 e 40 oppure quello č in piů č stato
scritto dove non doveva?!
thx
byez
B@STI

 ha scritto nel messaggio
news:anfv8.23273$b62.6...@news1.tin.it...

__________________________________________________________
E' corretto tutto:
tranne che in C i commenti conviene farli con /* questo e' un commento*/ ,
non usare //
utilizzate nel C++, puoi creare difficolta' ad alcuni compilatori.
conviene per una maggiore leggibilita' utilizzare
#define MAX 20
le lettere maiuscole

 le lettere maiuscole
ok
ti ringrazio!
Byez
B@STI

 > utilizzate nel C++, puoi creare difficolta' ad alcuni compilatori.
?
Ho sempre pensato che fosse il contrario! Pensavo che i commenti a linea
singola fossero per il C e quelli multipli per il C++... bo?!
Dome

Tu conta che quelle di cui parli sono direttive al PREprocessore, ovvero cio
che viene fatto dal compilatore č (prima di compilare) sostituire quello che
tu metti dopo il #define nel codice sorgente.
Se scrivi
#define MAX 10
int buf[MAX];
int buf2[MAX*2];
in realtą al compilatore arriverą il seguente codice:
int buf[10];
int buf2[10*2];
tutto qui.
Usare le macro č conveniente ma molto pericoloso!
Se scrivi una macro come questa:
#define MAX (a, b)  a > b ? a : b
e poi nel codice metti una chiamata a MAX del tipo...
int max = MAX(++a, b);
il codice verrą espanso cosi:
int max = ++a > b ? ++a : b;
ovvero avrai incrementato due volte il valore di a! Per questo genere di
motivi č sconsigliato l'uso delle macro come direttive al preprocessore...
ma finche si tratta di numeri, o stringhe, o macro semplici, e finche ti
ricordi dei pericoli a cui vai incontro non c'č problema.
Dome

 ricordi dei pericoli a cui vai incontro non c'è problema.
La macro che hai scritto tu è pericolosa anche per un altro motivo. Se
richiami la macro in questo modo:
MAX(a+b, c+d);
il preprocessore la espande così:
a + b > c + d ? a + b : c + d;
che equivale a:
( (a + (b > c) + d) != 0 ) ? (a + b) : (c + d);
Quindi ogni volta che si scrive una macro con parametri occorre inserire
tutte le parentesi necessarie:
MAX(a, b) ( ((a) > (b)) ? (a) : (b) )
Ciao,
Cecco

singola fossero per il C e quelli multipli per il C++... bo?!
peccato che sia il contrario :)
--
Lawrence Oluyede
rhy...@myself.com

 ( (a + (b > c) + d) != 0 ) ? (a + b) : (c + d);
No,  l'addizione  ha  precedenza  superiore  rispetto  al  confronto  il
risultato e`:
(a + b) > (b + c) ? (a + b) : (c + d);
che e` corretto.
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Ci sono due cose che l'uomo non puo` nascondere:
essere ubriaco ed essere innamorato.

E vabbo... evitiamo e basta e siamo tutti contenti!
^__________________________________^
Dome

 utilizzate nel C++, puoi creare difficolta' ad alcuni compilatori.
Sono corretti entrambi nel nuovo standard (ISO C99), sia i commenti che 
le dimensioni non costanti.
-- 
Baci,
Mony