Retour de fonction en langage C.

Résolu/Fermé
bernard - 6 févr. 2009 à 12:02
amateurb Messages postés 2 Date d'inscription vendredi 6 février 2009 Statut Membre Dernière intervention 6 février 2009 - 6 févr. 2009 à 15:55
Bonjour,

Voilà la fonction.

Ellle initialise A[][] avec des valeurs aléatoires.

/* ------------------------------------ */
double **R_mR(
double **A,
int      n
)
{
int      r;
int      c;

  for     (r=FIRST; r<A[R_SIZE][OF]; r++)
 	  for (c=FIRST; c<A[C_SIZE][OF]; c++)

                    A[r][c] = r_I(n);                    
 return(A);
}

Je peux l'utiliser comme cela .

while(!det_R(R_mR(P,n))); /* inversibles */

ou comme cela.

R_mR(P,n);

Dans le deuxième cas le retour de la fonction n'est pas utilisé.

Erreur de programmation ?

Merci

5 réponses

NookZ Messages postés 2138 Date d'inscription jeudi 29 janvier 2009 Statut Membre Dernière intervention 7 mars 2013 513
6 févr. 2009 à 12:11
Je pense que c'est parce que tu ne récupères pas la valeur de sortie, il faut que tu mettes une variable devant à qui tu assignes la valeur retournée
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
6 févr. 2009 à 12:26
Salut,
Je n'ai pas regardé en détail l'algorithme de la fonction, mais non il n'y a pas d'erreur de programmation a priori.
Tu récupères déjà la modification de la matrice en paramètre. Tu la récupères aussi en return. La valeur du return peut-être très pratique pour regarder si le retour vaut NULL ou pas.
Mais dans ton cas, il n'y a pas de souci, R_mR(P,n); modifiera ta matrice P.
0
amateurb Messages postés 2 Date d'inscription vendredi 6 février 2009 Statut Membre Dernière intervention 6 février 2009
6 févr. 2009 à 12:57
Bonjour,

Merci NookZ, fiddy.

Mon idée est de faire la même chose avec toutes mes fonctions.

add, mul, ...

Pour avoir la double possibilitée.

Cela pourait il être un problème ?

Merci
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
6 févr. 2009 à 13:48
Non, aucun souci, mais aucun intéret.
Si tu fait Q=R_mR(P,n), P sera initialis et Q aussi, mais se seront les même variable. ça reviens à faire:
R_mR(P,n);Q=P;
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
6 févr. 2009 à 13:53
Salut,
Oui tu peux le faire sans souci. Mais l'intérêt de cette méthode n'est pas d'avoir la double possibilité mais de renvoyer un code d'erreur en cas de problèmes internes à la fonction. Donc cette méthode est bien approprié pour les pointeurs où le code erreur sera NULL, éventuellement en définissant errno. Mais pour les fonctions qui renvoie juste une valeur et non un pointeur, là l'intérêt est moindre. Si tu veux un code erreur, tu renvoies 1 par exemple et 0 en cas de succès.
Mais pour une fonction simple où il n'y a pas lieu d'y avoir d'erreurs, le plus commode est de renvoyer bêtement la valeur en return.
Cdlt
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
amateurb Messages postés 2 Date d'inscription vendredi 6 février 2009 Statut Membre Dernière intervention 6 février 2009
6 févr. 2009 à 15:55
Merci à tout le monde.

Je pense que mon problème est résolu

Merci
0