[Tech] Compilatore cc
Franco Bagnoli
bagnoli@dma.unifi.it
Lun 23 Apr 2001 09:52:38 CEST
On Sun, 22 Apr 2001, Leonardo Boselli wrote:
> On 16 Apr 2001, at 10:50, Franco Bagnoli wrote:
> > 4) infine, per rendere illeggibile il codice, puoi scrivere
> > 5[a] = 3;
> > che e' lo stesso di
> > a[5] = 3;
> > (dato che entrambi sono tradotti in *(a+5) = 3
>
> Questa non la capisco per due motivi: se a è un puntatore e 5 uno
> scalare, come fa il sistema a capire che deve usare la dimensione
> giusta ?
perche' lo converte a *(a+5) che e' uguale a *(5+a)
> e inoltre mettiamo che abbia:
> int ** a;
> #DEFINE CAMPO1 0
> #DEFINE CAMPO2 1
> #DEFINE CAMPO3 3
> ... chi mi dice che
> CAMPO1[a[i]] sia meno leggibile che
> a[i][CAMPO1] o di a[i].CAMPO1 o a[i]->CAMPO1 ??????
CAMPO1[a[i]] === *(a[i]+CAMPO1) === a[i][CAMPO1]
quindi a[i] e' un puntatore
a[i].CAMPO1 e a[i]->CAMPO1 non funzionano (se CAMPO1 e' #definito
come un numero)
Per quanto riguarda la leggibilita': probabilmente
CAMPO1[a[i]] e' abbastanza leggibile, ma il problema e' che
la manutenzione diventa difficile: chiunque legga il codice rimane
frastornato dall'accoppiata
#define CAMPO1 0
...
CAMPO1[a[i]]
Casomai potresti definire
#define CAMPO1(v) v[0]
...
CAMPO1(a[i]) = 5;
che ha lo stesso effetto ma e' piu' leggibile
--
Franco Bagnoli
Dipartimento di Matematica Applicata "G. Sansone"
Universita' di Firenze, Via S. Marta, 3 I-50139 Firenze, Italy
tel. +39 0554796422, fax: +39 055471787
e-mail: bagnoli@dma.unifi.it
Maggiori informazioni sulla lista
flug-tech