Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2955 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [C] définition d'une structure dynamique

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] définition d'une structure dynamique

n°748897
lordankou
Posté le 02-06-2004 à 14:47:39  profilanswer
 

Bon voila je me pose la question suivante :  
je dois définir une structure qui sera presque tjrs identique à l'exception de un ou deux paramètres.
ors si je me trompe pas mes fonctions écrites pour un type ne seront pas compatibles avec un autre type.
Je voudrais donc savoir si on peut spécifier un Type général qu'on pourrait ensuite spécialiser par exemple en incluant des fichier h avec les nouvelles spécificités (sans modifier les fonctions).
 
Je sais qu'en ADA c possible par exemple sur les fichiers où on spécifie à l'écriture du code quels sont les types de fichier qu'on va ouvrir (fichier d'entier, d'enregistrement complexes...). Je voudrais faire la même chose mais avec des objets en mémoires.
 
voila j'espère avoir été assez claire.  :??:


---------------

mood
Publicité
Posté le 02-06-2004 à 14:47:39  profilanswer
 

n°748905
Taz
bisounours-codeur
Posté le 02-06-2004 à 14:51:02  profilanswer
 

tu ne peux pas. enfin pas simplement.
 
vite fais si ça te satisfait, tu peux jouer avec une union + enum
 
sinon, c'est des couches genre Glib ou OOC

n°748935
lordankou
Posté le 02-06-2004 à 15:04:06  profilanswer
 

ok vais me renseigner sur le sujet. de toute façon j'ai le temps donc bah si il y a un moyen autant en profiter car je risque de devoir utiliser une dizaine de type différent avec des fonctions qui ne changent pas vraiment à l'exception des types des variables


---------------

n°748939
Taz
bisounours-codeur
Posté le 02-06-2004 à 15:04:57  profilanswer
 

bah si tu en connais le nombre, la solution union + enum ça peut te satisfaire

n°748944
lordankou
Posté le 02-06-2004 à 15:05:56  profilanswer
 

euh question bête et méchante : c quoi Glib et OOC ?


---------------

n°748953
Taz
bisounours-codeur
Posté le 02-06-2004 à 15:07:33  profilanswer
 

une pseudo couche objet, OOC est un peu marginal mais facile à utiliser et performant.

n°748962
lordankou
Posté le 02-06-2004 à 15:10:19  profilanswer
 

en fait non je connais pas vraiment. ça pourra varier d'un problème à l'autre. ça dépend de ce que les biologiste veulent. je pourrais a avoir à stocker des vitesses, des biomasses, des hauteurs d'eau, une bathymétrie...
ors c'est tjrs stocké dans un fichier texte mais avec des colonnes différentes.
et si un jour j'ai besoin de rajouter une nouvelle couches d'information de n'avoir juste qu'à créer un fichier h avec la structure de la nouvelle couche


---------------

n°749058
lordankou
Posté le 02-06-2004 à 16:25:43  profilanswer
 

en utilisant un pointeur générique (void *) je pourrais pointer vers n'importe quel type de structure ? c'est à dire pointer par exemple vers un int ** ou un float **  
et donc si je le mes en paramètre dans la déclaration de mes fonctions je pourrais passer un peu près n'importe quoi dedans (tant qu'à l'intérieur de ces dernières je fasse attention aux incompatibilité de type).
C'est bien ça ? (c'est des notions totalement nouvelles qu'on apprend pas du tout à l'iut)


---------------

n°749092
lordankou
Posté le 02-06-2004 à 16:41:40  profilanswer
 

bon j'ai rien dit sur le site :
http://flenu.ise-mons.be/cours/rappel/pointdef.php
bah ils disent c bon juste pour de l'affectation. donc j'en conclue qu'on ne peut pas mettre ça pour de la déclaration de fonction


---------------

n°749113
Taz
bisounours-codeur
Posté le 02-06-2004 à 16:50:28  profilanswer
 

ah ouais mais attend, si tu veux stocker des données, c'est encore plus simple : union + enum, tu écris également l'énum et pan t'as le type de ta donnée

mood
Publicité
Posté le 02-06-2004 à 16:50:28  profilanswer
 

n°749151
lordankou
Posté le 02-06-2004 à 17:11:48  profilanswer
 

l'union permet de choisir tel ou tel type. ce qui implique donc de connaitre le type à l'avance. mais si je mes la structure dans un fichier à part je n'aurai donc qu'à modifier cette dernière pour modifier (ajouter ou supprimer) un type. Ensuite pour l'utilisation si mes types sont des pointeurs je peux donc allouer dynamiquement l'espace et pas perdre de place et avec l'union je sélectionne dans chaque fonctions quelle partie de ma structure je dois utiliser.
 
Donc au final si j'utilise un union dans ma structure suivante :
 

Code :
  1. typedef struct Tableau
  2. {
  3.     // tableau contenant les coordonnes du vecteur propre à un fichier
  4.     float ** tabCoordonnees;
  5.     // nombre de vecteurs vitesse
  6.     int NombreVecteur ;
  7.     // nom du fichier correspondant aux mesures;
  8.     char * NomDuFichier;
  9.     // heures de la mesure
  10.     char * HeureMesure;
  11.     // pointeur vers le tableau suivant
  12.     struct Tableau * suivant ;
  13. } TableauVitesse ; // nom final de la structure


 
à la place float ** tabCoordonnees;  
je pourrais donc au choix prend un int ** ou un mixte de tableau d'entier et de char * (qu'il faudra que j'inclue dans la déclaration bien sur)
bref je pourrais un peu tout faire c bien ça ? (à condition de prévoir les test pour savoir quelles sont les types utilisés à l'intérieur de mes fonctions).


---------------

n°749158
lordankou
Posté le 02-06-2004 à 17:15:04  profilanswer
 

grande question aussi :  
l'union correspond donc à un OU
mais dans l'attribution de la mémoire si je choisis à un moment ou un autre de changer de type ne risque t-il pas de réécrire par dessus des valeurs correspondant à un élément précédemment sélectionné de l'union ?


---------------

n°749170
Taz
bisounours-codeur
Posté le 02-06-2004 à 17:21:19  profilanswer
 

ben une union, c'est le même espace mémoire

n°749182
lordankou
Posté le 02-06-2004 à 17:27:17  profilanswer
 

c'est à dire que si j'ai :
patate.autruche = 10
puis patate.tanga = 20
 
je perderai patate.autruche ?  
(bon en même temps je crois que ça ne génerais pas --> va réfléchir à ce problème ce soir en rentrant de son stage)


---------------

n°751872
Taz
bisounours-codeur
Posté le 04-06-2004 à 06:47:30  profilanswer
 

oui

n°751873
Taz
bisounours-codeur
Posté le 04-06-2004 à 06:49:27  profilanswer
 

Code :
  1. #include <stdio.h>
  2. #include <string.h>
  3. enum Type
  4.   {
  5.     INTEGER,
  6.     REAL,
  7.     STRING
  8.   };
  9. struct Var
  10. {
  11.   enum Type type;
  12.   union
  13.   {
  14.     int i;
  15.     double f;
  16.     char str[128];
  17.   } data;
  18. };
  19. void Var_init_with_integer(struct Var *v, int i)
  20. {
  21.   v->type   = INTEGER;
  22.   v->data.i = i;
  23. }
  24. void Var_init_with_real(struct Var *v, double f)
  25. {
  26.   v->type   = REAL;
  27.   v->data.f = f;
  28. }
  29. void Var_init_with_string(struct Var *v, const char *s)
  30. {
  31.   v->type   = STRING;
  32.   strncpy(v->data.str, s, sizeof v->data.str);
  33.   v->data.str[ sizeof v->data.str - 1 ] = '\0';
  34. }
  35. void Var_print(const struct Var *v)
  36. {
  37.   switch(v->type)
  38.     {
  39.     case INTEGER:
  40.       printf("Var %d\n", v->data.i);
  41.       break;
  42.     case REAL:
  43.       printf("Var %f\n", v->data.f);
  44.       break;
  45.     case STRING:
  46.       printf("Var %s\n", v->data.str);
  47.       break;
  48.    
  49.     default:
  50.       printf("Var UNKNOW\n" );
  51.      
  52.     }
  53. }
  54. int main()
  55. {
  56.   struct Var v;
  57.   Var_init_with_integer(&v, 42);
  58.   Var_print(&v);
  59.   Var_init_with_real(&v, 69.69);
  60.   Var_print(&v);
  61.   Var_init_with_string(&v, "TazForEver" );
  62.   Var_print(&v);
  63. }

un exemple simple
 
 
attention
 
e.x = ...;
... = e.y;
 
est indéfini


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [C] définition d'une structure dynamique

 

Sujets relatifs
[Perl] Regular expression "dynamique"problème de menu dynamique
Problème de tableau dynamique[XML] Modification dynamique de page xml
Envois dynamique de formulaire.[STL] pb vector de structure contenant des tableaux
rafraîchir un tableau croisé dynamiquecalcul dynamique en fonction d'un formulaire
[résolu][php] pb variable dynamique[C] Allocation dynamique et recuperation de donnees
Plus de sujets relatifs à : [C] définition d'une structure dynamique


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR