[Kos-misc] Fonction en C retournant une structure...

Thomas Petazzoni thomas.petazzoni@ifrance.com
Mon, 17 Sep 2001 18:59:27 +0200


salut,

pdt un cours d'info on est venu a discuter de la valeur de retour d'une
fonction en C. un mec me soutenait mordicus que un truc comme le
programme suivant marchait, alors que ca retourne direct une structure.
moi je pense qu'il faut un pointeur. pourtant son programme marche.

d'apres mes premieres recherches il semblerait que dans ce cas le
compilo converti implicitement en pointeur. mais j'ai remarque que si la
fonction retourne void, main empile juste les trois valeurs, par contre
si ca renvoie un triint, main empile les trois valeurs, plus une valeur
dans eax, qui semble etre une adresse sur la pile.

le programme suivant est-il correct ? pourquoi ? dans quels cas ca merde
?

typedef struct {

  float x[3],y[5],z[6];

}trifloat;



trifloat fonct(float s,float d,float f);



int main(void)
{ 
  int x=0,y=0;
  trifloat q;

  q = fonct(1.2,5.3,2.7);

  printf("le putain de resultat : %f %f %f
%f",q.x[1],q.y[2],q.z[3],q.y[1]);
  getch();

  return 0;
}


trifloat fonct(float s,float d,float f)
{
  trifloat res;

  res.x[1]=s;
  res.y[2]=d;
  res.z[3]=f;

  return res;
}

Merci bcp

thomas
-- 
PETAZZONI Thomas
thomas.petazzoni@meridon.com     UIN : 34937744
Projet KOS : http://kos.enix.org
Page Perso : http://www.enix.org/~thomas/