Après "Pimp My Ride" ....."Cast my struct" !! - C - Programmation
Marsh Posté le 04-06-2007 à 17:12:34
in_your_phion a écrit : alors que les structures ne sont pas les mêmes. Quelqu'un pourrait-il m'expliquer comment marches les cast avec des structures, est ce risqué ou est ce normal ??? Est ce que cette démarche est valide. |
C'est pas la structure qui est castée, c'est le pointeur. Et si je dis pas de connerie, un pointeur est toujours un pointeur, quelque soit l'élément sur lequel il pointe (tu verras souvent des fonctions prendre en paramètre un void *).
in_your_phion a écrit : on envoi a la structure sa structure ? |
Oui parceque le C n'est pas un langage objet et que le mot clef "this" n'existe pas. Alors il faut bien passer le contexte en paramètre...
Marsh Posté le 04-06-2007 à 17:38:07
Ce genre de chose est en effet risqué vu qu'avec un cast, on bypasse la vérification du typage par le compilo, il faut donc bien calculer son coup et être sûr que les données reçues seront à tous les coups couvertes par l'un des cas prévus, sinon, on arrive rapidement à un crash.
Souvent, dans ce genre de cas, on essaye de faire une union, qui permet une vérification statique. Mais ça reste tout de même rare, parce que c'est plutôt crade, c'est effectivement utile quand on essaye de minimiser les données à transmettre ou sauvegarder (mais dans ce cas, je choisirais un algo de compression plutôt qu'un hack à base cast/union/void *). Et dans l'exemple ci-dessus, ça me parait assez extrême.
Marsh Posté le 04-06-2007 à 17:56:31
el muchacho a écrit : Et dans l'exemple ci-dessus, ça me parait assez extrême. |
Ca c'est clair, l'exemple ci-dessus c'est comment essayer de faire de l'objet en C (y'a même une vague notion d'héritage)...
Marsh Posté le 04-06-2007 à 18:17:13
Code :
|
Comme tu peut le voir, ta structure FrameA a comme premier membre une structure Frame_s.
Si tu as
Code :
|
ton pointeur pointe vers le début de la structure FrameA_s, c'est à dire qu'il pointe sur son premier membre, si tu caste ton pointeur avec le type du premier membre, tu accèdera correctement à ce premier membre :
Code :
|
Fait un dessin avec des boiboites, tu verra que c'est logique.
Marsh Posté le 04-06-2007 à 16:40:30
Salut,
Alors voila, il était une fois ....
......et ceci amenant cela, je fus rapidement confronté a un problème de programmation en C.
...
Donc, je ne comprend pas comment marche les casts sur les structures. J'ai vu un exemple sur le net de programmation générique, ou la personne recherche à passer une structure générique à une fonction, pour une application client-serveur á développer contenant une centaine de formats de trames différentes.
http://www.developpez.net/forums/s [...] p?t=345137
Je met le code ici pour que ce soit plus clair :
Je comprend ce que fais le programme mais pas vraiment le concept, notamment les casts :
alors que les structures ne sont pas les mêmes. Quelqu'un pourrait-il m'expliquer comment marches les cast avec des structures, est ce risqué ou est ce normal ??? Est ce que cette démarche est valide.
Je ne comprend pas bien non plus le :
on envoi a la structure sa structure ?
merci par avance
Message édité par in_your_phion le 04-06-2007 à 16:46:42