PDA

Voir la version complète : Passage de structure en parametre d'une fonction


Japi
28/03/2006, 22h38
Slt!

J'aimerais passer une structure en parametre d'une fonction, en C normalement, ça se fait bien, en ecrivant

void mafonction (struct MonTypeStructure MaStructure)
{blablabla}

mais ça marche pas... il me prend pas ma structure mais ne retourne pas d'erreur.

comme si je lui passais rien.

Je sais que certaines version du C ne permettent pas le passage de structure en parametre mais seulement le passage de pointeur vers une structure en parametre.
Est-ce le cas ici ?

Voilà, si vous avez dejà fait un truc dans le style, pourriez vous m'aider, svp.

thoduv
28/03/2006, 22h54
Oui, moi je fais ca comme ca :
void ma_fonction(ma_structure str);
et l'appel :
ma_structure str;
ma_fonction(str);
Et ca marche ...

birslip
28/03/2006, 22h55
Je pense que ouais, faut mettre le pointeur vers la structure, j'ai toujours fait comme ça, et ça marche :)

void maFonction(MaStruct* Structure) {
if(blabla) {
ok;
}
}

Japi
28/03/2006, 23h04
vous mettez pas linstruction "struct" avant votre type de structure et votre structure dans les param?

Ma structure est définie dans un .h inclu dans main.c et la fonciton qui doit utiliser cette structure est dans main.c

j'arrive à acceder aux champs de la structure puisque etant inclu dans main.c, elle passe globale mais pas à la faire passer en param, ptet que j'ai loupé un truc à ce niveau ?

thoduv
28/03/2006, 23h06
vous mettez pas linstruction "struct" avant votre type de structure et votre structure dans les param?

Ma structure est définie dans un .h inclu dans main.c et la fonciton qui doit utiliser cette structure est dans main.c

j'arrive à acceder aux champs de la structure puisque etant inclu dans main.c, elle passe globale mais pas à la faire passer en param, ptet que j'ai loupé un truc à ce niveau ?
Si on ne mets pas struct c'est parce qu'on utilise systèmatiquement une déclaration du style :
typedef struct
{
int sert_a_rien;
} ma_structure_t;

Japi
28/03/2006, 23h07
j'ai viré le "struct", ça compile sans erreur, mais il se passe rien comme si la structure passée etait vide.

EDIT:
Ok, je declare aussi mes structures avec un typedef devans, enfin, ça depdn des fois, mais là oui donc evidemment, il est défini, et pas besoin de "struct", c'etait logique, merci.

Sinon, j'ai trouvé, en fait je passais bien ma structure (en dehors du struct mais comme j'avais essayé peins de truc possible...) mais l'erreur etait ailleur, donc ça marche. Merci tout le monde.

Japi
28/03/2006, 23h17
Finallement, j'ai tous passé par adresse comme ça, plus de probleme parce que en passant par valeur, j'avais acces en lecture à la structure mais pas en ecriture direct et ça genait à un endroit, pis vu qu'elle est un peu grosse, ça ira plus vite.

DJP
28/03/2006, 23h33
Finallement, j'ai tous passé par adresse comme ça, plus de probleme parce que en passant par valeur, j'avais acces en lecture à la structure mais pas en ecriture direct et ça genait à un endroit, pis vu qu'elle est un peu grosse, ça ira plus vite.

Bah si ta structure est locale et pas globale c'est sur. Par contre si tu l'utilise souvent c'est tout aussi simple de la placer en globale...

Japi
28/03/2006, 23h40
Elle est en globale, mais ça empeche pas de la passer dans les fonctions pour avoir un truc propre. parce que je pourrais acceder aussi aux champs direct puisqu'elle est globale mais c'est moche.