Esercizio di analisi (Problema n° 3)



Si riportano, per comodità, frammenti del listato da analizzare:
 
typedef struct {
char c1;
int c2;
} TipoStrutt;
/* prototipi */
void Proc1 (char *, int);
void Proc2 (TipoStrutt);
void Proc3 (int, int *, int);
void Proc4 (TipoVett);
int Fun1 (char, int);
typedef int TipoVett[4];
main() { 
char a;
int i;
TipoStrutt s;
TipoVett v;
/* ... */



Correttezza delle chiamate:
1
Proc1(&a, i); OK
2
Proc1("a", i); OK (una costante di tipo stringa ha per valore l'indirizzo di memorizzazione, che punta dunque a una cella contenente un carattere)
3
Proc2(s); OK
4
Proc2(s.c1, s.c2);  Errata:
  1. Il primo parametro attuale ha un tipo non compatibile con quello del parametro formale
  2. C'è un parametro attuale in più
5
Proc2(s.c2, s.c1); Errata:
  1. Il primo parametro attuale ha un tipo non compatibile con quello del parametro formale
  2. C'è un parametro attuale in più
6
Proc3(v[3], &v[2], v[1]); OK
7
Proc3(v[1], i, i); Errata (ma di norma questo errore genera solo un "warning"):
  1. Il secondo parametro attuale ha un tipo non compatibile con quello del corrispondente parametro formale
8
Proc4(v); OK
9
Proc4([i,v[2],i]); Errore di sintassi
10
i = Fun1(a, i);  OK
11
Fun1(a, i);  OK (il valore restituito dalla funzione viene ignorato)
12
i = Fun1('1', i);  OK