Secondariamente ho una funzione che riceve l'indirizzo di una variabile del tipo struct incriminato. Questa funzione ha il compito di analizzare una stringa e "compilare" i membri della struttura.
Ora il problema è avere un puntatore generico, che riesca a puntare a un membro qualsiasi della struttura e che riesca a modificarlo attraverso un assegnamento.
Ad esempio, ho la struttura:
- Codice: Seleziona tutto
struct x {
char *a;
xyz_t *b;
}
In una funzione devo dichiarare un puntatore ptr "compatibile" con tutti i membri e assegnargli l'indirizzo di uno di essi.
- Codice: Seleziona tutto
ptr = &x->s;
A questo punto devo assegnare a ptr il valore di ritorno di una seconda funzione:
- Codice: Seleziona tutto
*ptr = f()
quest'assegnamento deve andare a finire nel membro puntato da ptr, s in questo caso, esattamente come se avessi usato:
- Codice: Seleziona tutto
x->s = f();
Ora come ora sto usando un int*:
- Codice: Seleziona tutto
int *ptr;
ptr = (int *) &x->s;
*ptr = (int) f();
il programma funziona correttamente, ma durante le compilazione ho:
- Codice: Seleziona tutto
warning: dereferencing type-punned pointer will break strict-aliasing rules
Ci sono alternative al puntatore int e posso evitare in qualche modo quel warning senza togliere dal makefile -O2 -Wall e senza aggiungere -fno-strict-aliasing ?
Diciamo che la mia è soprattuto una curiosità, come ho già detto il programma funziona, ma non sono sicuro di agire nel modo corretto.



)


vedi che succede a fare tutto con il sottogruppo c del c++