[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