PDA

View Full Version : struct e buona programmazione


Lux6685
23-02-2014, 13:36
E' corretto, da punto di vista di una buona programmazione, operare nel main su una struct ma inserire in una funzione, che agisce solo su uno dei campi della struct, come argomento solo il tipo del campo e non tutta la struct?

mi spiego meglio con un esempio:

una struct del genere:
typedef struct
{
int x;
int y;
char f
char a[20];

} s


io voglio utilizzare una funzione per modificare solo il campo x della struct.
una funzione come questa:
void f (int i)
{
scanf("%d",&i);
};


scrivendo un main del genere:
int main()
{
s st;
.....
f(st.x);
....
}

è corretta? si può inserire come argomento della funzione un semplice intero e non una struct?
Dovrei invece scrivere la funzione così?
void f(s S)
{
scanf("%d",&S.x);
};

int main()
{
s st;
....
f(st);
....
}




funzionano entrambi i casi.... ma un buon programmatore cosa farebbe??

lorenzo001
23-02-2014, 13:50
Veramente non funzionano e sono sbagliate.

Dovrebbero essere


void f (int *i)
{
scanf("%d", i);
}


oppure


void f(s *S)
{
scanf("%d", &S->x);
}


e chiamate con


f(&st.x);


f(&st);


Per il resto, l'uso di una o l'altra, è abbastanza indifferente.

WarDuck
23-02-2014, 20:32
Dal mio punto di vista, se raggruppi dei dati in una struttura è perché in qualche modo essi sono correlati.

In tal senso, sarebbe buona norma creare funzioni che operino sulla struttura.

Esempio:


struct list
{
...
};


void* list_add(struct list* ls, void* value);
void* list_remove(struct list* ls, void* value);
void* list_find(const struct list* ls, key a);

Daniels118
24-02-2014, 09:55
Io sono pienamente d'accordo con lorenzo001, comunque come regola generale mi affiderei a <<Cosa deve fare la funzione?>>.