Retours multiples de fonctions : où déclarer les variables de réponses ?
Bonjour,
je me posais la question de où déclarer des variables (structures, tableaux, ...) permettant à mes fonctions de renvoyer plusieurs informations.
Exemple (simplifié):
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| int main()
{
while(1)
{
fonction1();
}
}
void fonction1(void)
{
int i;
for(i=0;i<100;i++)
{
fonction2(tab_resultat, i)
//ici, on exploite tab_resultat
}
}
fonction2(int *tab_resultat, int entree)
{
int j;
for(j=0;j<100;j++)
{
tab_resultat[entree]=(j==entree);
}
} |
Ma question est donc où déclarer tab_resultat (tableau de 100 int), sachant que tab_resultat n'est exploité que dans l'itération en cours de la boucle for de fonction1: je vois 3 solutions, chacune avec ses avantages et inconvénients:
-on déclare tab_resultat au début de fonction1 : inconvénient : on recrée le tableau à chaque appel de fonction1 (perte de temps)
-on déclare tab_resultat dans le main et on le passe en argument à fonction1 : avantage, on ne déclare qu'une fois le tableau; inconvénients : on doit l'écrire en paramètres pour 2 fonctions : perte de temps et alourdissement du code + ralentissement (plus de données à mettre en pile d’exécution)
-on crée une variable globale : avantages : on ne doit jamais le passer en argument d'une fonction, et dans certains cas (ex : un int), on peut manipuler l'objet sans avoir à transmettre un pointeur dessus à la place, mais on "s'encombre" avec de nombreuses variables globales.
NB : en pratique, toute mes fonctions ne sont pas dans le même fichier et il y en a parfois plus d'imbriquées
NB: j'ai pris ici un exemple avec un tableau, mais il peut s'agir de tout autres objets, de l'entier à une structure compliquée, ou a plusieurs objets différents (fonctions à plus d'arguments).
Ma question est donc la suivante : laquelle des méthodes est la meilleure (ou encore une autre à laquelle je n'aurais pas pensé)?
En vous remerciant par avance
Sandro11