celui ci:
et celui-ci avec inline?Code:
1
2
3
4 int fac(int n) { return (n<2)?1: n*fac(n-1); }
VC2005 donne le meme résultat quand je fais f(3) (=6).Code:
1
2
3
4 inline int fac(int n) { return (n<2)?1: n*fac(n-1); }
A quoi sert inline?
Version imprimable
celui ci:
et celui-ci avec inline?Code:
1
2
3
4 int fac(int n) { return (n<2)?1: n*fac(n-1); }
VC2005 donne le meme résultat quand je fais f(3) (=6).Code:
1
2
3
4 inline int fac(int n) { return (n<2)?1: n*fac(n-1); }
A quoi sert inline?
j'ai pas compris grand chose.
Quand le compilateur évalue l'appel d'une fonction inline, le code complet de cette fonction est inséré dans le code de l'appelant (c'est le même principe que ce qui se passe avec un #define).
Dans mon cas, quel est l'appelant.
Ca veut dire quoi "etre insérer dans le code de l'appelant?"
si tu definis une fontion, c'est bien pour l'utiliser quelque part. donc tu vas l'appeler dans ton programme, a un moment donné. dans le cas d'une fonction inline, le code de la fonction sera insere a la compilation a l'endroit ou tu l'as appelée.
tu vois ladifférence que quand tu es un pro, pas un novice comme moi.
je ne suis pas un pro, je te jure que c'est tres loin d'etre compliqué.
Salut,
La différence entre une fonction "inline" et une fonciton qui ne l'est pas va se jouer au niveau du langage machine, et donc au niveau de la rapidité d'exécution et de la taille finale de l'exécutable.
Pour bien comprendre le principe, il faut avoir ne serait-ce qu'une vague idée de ce qui se passe du point au niveau de la mémoire, lors de l'appel d'une fonction :P:
En simplifiant, juste pour que tu puisse comprendre, il faut savoir que chaque fonction est repérée dans la mémoire par l'adresse à laquelle elle commence.
Quand on appelle une fonction, une série d'informations - dont entre autres les valeurs qui se trouvent dans les accus et le pointeur sur l'adresse de la prochaine instruction - est poussée dans la pile (le "stack"), puis, on signale qu'il faut "sauter" à l'adresse à laquelle commence la fonction appelée.
Une fois la fonction finie, les différentes valeurs sont récupérée dans la pile, remises à leur place d'origine, et on signale qu'il faut "retourner" à l'instruction qui suit l'appel de la fonction.
Tout cela prend du temps, et on pourrait meme dire, beaucoup de temps... du moins en nombre de fréquences d'horloges nécessaire pour y arriver :P
Le mot clé "inline" dit, en gros, au compilateur queL'avantage évident, c'est qu'on évite ainsi toute cette "perte de temps inutile" que représente le fait de pousser les informations dans le stack et de les récupérer ensuite.Citation:
je sais que c'est une fonction, mais je voudrais que tu ne produise pas un code comme celui qui est utilisé pour appeler une fonction.
Je préfère que tu insère directement les instructions de la fonction à l'endroit de l'appel
L'inconvéniant, c'est que, souvent, cela peut représenter une augmentation notable de la taille de l'exécutable, du fait qu'une même série d'instructions (celle de la fonction) sera dupliquée aussi souvent que la fonction est appelée dans l'ensemble du code...
Maintenant, il reste une limite au mot clé inline...
En effet, il faut savoir que tu demande au compilateur d'insérer directement les instructions de la fonction à l'endroit de l'appel, mais... qu'il n'est pas du tout obligé de le faire...
Avec un peu de chance, il le fera, avec un peu moins, il ne le fera pas...
Pire, il n'est pas impossible qu'il le fasse pour certains appels de la fonction, et qu'il crée une fonction, appelée en tant que telle, pour d'autres appels...
that's all ;)