[C] possible de passer une union en parametre a une fonction ?

possible de passer une union en parametre a une fonction ? [C] - C - Programmation

Marsh Posté le 04-12-2003 à 15:35:09    

:hello: tous
 
 
Je suis en train de coder une fonction qui sert a creer une structure. Au sein de la structure, il y a une union pour stocker des valeurs. Ce que je souhaiterais, c'est passer une union en parametre a cette fonction... Possible ou pas ? Si oui, le prototype aurait quelle tete ? Si non, idee de remplacement ?
 

Code :
  1. typedef struct s_fait
  2. {
  3. char lib[10];
  4. union toto
  5. {
  6.   int n;
  7.   char *chaine;
  8.   } valeur;
  9.   t_type type;
  10.   int terminal;
  11. } t_fait;


 :jap:


---------------
Filmstory : gardez trace des films que vous avez vu ! :D
Reply

Marsh Posté le 04-12-2003 à 15:35:09   

Reply

Marsh Posté le 04-12-2003 à 16:26:46    

oui, c'est possible.
 
NB : en C++, et uniquement en C++, une union peut être anonyme
 
ça fonctionne comme unestructure, donc le passage par pointeur fonctionne, etc. petit exemple
 

Code :
  1. struct Bar
  2. {
  3.   union Baz
  4.   {
  5.     char c[sizeof(int)];
  6.     int i;
  7.   } u;
  8.   double dummy;
  9. };
  10. static void doSomething(struct Bar *r, union Baz z)
  11. {
  12.   r->u = z;
  13. }
  14. #include <stdio.h>
  15. int main()
  16. {
  17.   struct Bar r;
  18.   union Baz z;
  19.   r.dummy = 3.1415;
  20.   z.i = -33;
  21.   printf("dummy = %f\n"
  22.  "i = %d\n",
  23.  r.dummy,
  24.  r.u.i);
  25.   doSomething(&r, z);
  26.   printf("dummy = %f\n"
  27.  "i = %d\n",
  28.  r.dummy,
  29.  r.u.i);
  30.   return 0;
  31. }

Reply

Marsh Posté le 04-12-2003 à 16:50:45    

Arf, seulement en C++.. zut :/
J'ai reussi a bricoler une solution de remplacement... c'est pas genial, mais ca marche
En tous cas, merci pour les explications ! :)


---------------
Filmstory : gardez trace des films que vous avez vu ! :D
Reply

Marsh Posté le 04-12-2003 à 16:58:00    

bas si tu utilisais une union anonyme, c'est justement que tu ne la manipulerais jamais en tant que telle

Reply

Marsh Posté le 04-12-2003 à 16:59:27    

qu'est ce que t'appelles union anonyme ?


---------------
Filmstory : gardez trace des films que vous avez vu ! :D
Reply

Marsh Posté le 04-12-2003 à 17:02:21    

une union sans nom

Reply

Marsh Posté le 04-12-2003 à 17:05:32    

ah ok. tt simplement :D


---------------
Filmstory : gardez trace des films que vous avez vu ! :D
Reply

Marsh Posté le 04-12-2003 à 17:07:50    

euh t'as bien compris que le code que j'ai donné, c'est du C ANSI  ?

Reply

Marsh Posté le 04-12-2003 à 17:11:28    

oui j'ai compris le truc, mais je vais laisser comme c'est actuellement... C'est peut etre pas tres "propre", mais ca fonctionne :)


---------------
Filmstory : gardez trace des films que vous avez vu ! :D
Reply

Marsh Posté le 04-12-2003 à 17:14:17    

ben c'est quoi l'intéret de ta question ?

Reply

Marsh Posté le 04-12-2003 à 17:14:17   

Reply

Marsh Posté le 04-12-2003 à 17:16:15    

Entre temps, j'ai trouve une autre maniere de faire, c'est tout ...


---------------
Filmstory : gardez trace des films que vous avez vu ! :D
Reply

Marsh Posté le 04-12-2003 à 22:42:48    

partisant du moindre effort :)

Reply

Marsh Posté le 05-12-2003 à 02:26:11    

Pour info certains compilo C autorisent les unions anonymes... Ce qui n'est évidemment pas une raison pour les utiliser puisque c'est interdit en C ANSI.

Reply

Marsh Posté le 05-12-2003 à 02:35:53    

pour info tous les compilateurs proposent des fonctionnalités qui leurs sont propres

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed