View Full Version : [C] Domande varie su strutture
Ciao ragazzi, ho un paio di domande sulle strutture C:
1)Data una struttura, come faccio a sapere quanti campi ha?
2) Come faccio a sapere il tipo di ogni campo?
3) Come faccio a prelevare il nome del campo?
Ovviamente suppongo che non conosca nulla di questa struttura. Voglio creare una funzione che tratti una struttura generica, senza sapere a priori come è fatta. E' possibile? Grazie.
DanieleC88
19-03-2009, 10:32
No. :D
Almeno, non che io sappia. In fondo, a run time, se tu non conosci assolutamente nulla di quella struttura, puoi soltanto dire che è una zona contigua di memoria. Non credo sia possibile sapere nemmeno se ha più di un campo. :)
ciao ;)
Non hai alcun modo. Proprio nessuno :asd:
Per di più, se contiene puntatori non puoi nemmeno dire che è una zona contigua di memoria... perchè quei dati stanno altrove. :mc:
IMHO, potresti tentare una specie di auto-riflessività: le strutture che devono fornire queste informazioni avrebbero sicuramente un puntatore ad una regione di memoria void* chiamata type_id o qualcosa di simile.
In questa regione potresti poi salvare in forma binaria le informazioni che ti serviranno in seguito.
Non ho idea se possa funzionare però :asd:
Forse col C++ e il polimorfismo sarebbe più facile.
DanieleC88
19-03-2009, 10:55
Per di più, se contiene puntatori non puoi nemmeno dire che è una zona contigua di memoria... perchè quei dati stanno altrove. :mc:
Sbagliato, la struttura resta una zona di memoria contigua, sono i puntatori a farne parte, non i dati puntati. :Prrr:
(sì, ho capito cosa intendevi, era solo per precisare :D)
Beh ma è una sfumatura importante... perchè se una struttura non contiene puntatori se ne può avere una identica semplicemente usando memcpy.
Al contrario, se ci sono puntatori fare la stessa cosa genera un disastro.:D
Quindi per l'OP è anche abbastanza importante.
Potresti accompagnare la struttura con una stringa terminata da \0 posta in cima. La stringa potrebbe contenere la descrizione dei campi successivi
Certo la complessità nell'andare a recuperare la struttura sarebbe comunque notevole ;)
Tanto C non è un linguaggio precisamente elegante :asd:
E poi (con la certezza che la stringa sta per prima) basterebbe fare cast del pointer a (char*) per ottenere il primo char della stringa. O no?:stordita:
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.