Fonctions en ligne en C ++

Fonctions en ligne en C ++
Lorsqu'une fonction normale est appelée en C ++, certains sont entendus juste pour appeler la fonction. En fait, appeler une fonction prend du temps avant que la fonction ne commence vraiment à exécuter. Cette fois entre le moment où la fonction est appelée et quand la fonction commence vraiment à exécuter est appelée le temps de commutation. Si la fonction normale est grande, ce qui signifie qu'il faudra beaucoup à exécuter, le temps de commutation est relativement petit et l'utilisateur peut l'ignorer. Cependant, si la fonction normale est petite, comme de nombreuses fonctions le sont, alors le temps de commutation, à peu près le même pour les grandes et petites fonctions, ne doit pas être ignoré. Dans de nombreuses situations, le temps de commutation est plus long que le temps que la petite fonction prend pour vraiment exécuter; Dans certains cas, beaucoup plus longtemps.

Pour résoudre ce problème, C ++ utilise la macro et la fonction en ligne. Une macro est comme une petite fonction, mais elle est généralement plus courte qu'une petite fonction typique. La macro la plus longue est toujours une «déclaration». Un corps de fonction peut avoir plus d'une déclaration. Une petite fonction en ligne présente des avantages par rapport à une petite fonction normale.

Lorsqu'une macro est définie, elle s'appelle plus tard dans le programme. Une fonction en ligne est également définie puis appelée plus tard dans le programme. Une fonction normale est définie puis appelée plus tard dans le programme. Tous ces trois types sont définis et appelés plus tard dans le programme. L'un d'eux peut être appelé plus d'une fois.

Les fonctions macro et petites en ligne sont différentes de la fonction d'approche normale lorsqu'elles sont plus tard dans le programme. Le compilateur C ++ place le macro-code défini ou le petit code de fonction en ligne défini (corps) partout où il est appelé dans le programme. Lorsque le compilateur le fait, le compilateur aurait élargi la macro ou la fonction en ligne. Ce n'est pas le cas pour une fonction normale. La fonction normale n'est pas élargie, où elle s'appelle.

Alors que l'appel d'une fonction normale nécessite un temps de commutation, pour que la fonction soit correctement affirmée avant son exécution, la macro ou la petite fonction en ligne commence l'exécution chaque fois qu'elle est appelée, et il n'y a pas de temps de commutation. C'est le principal avantage que la macro et la petite fonction en ligne ont sur la fonction normale, je.e., Le temps de commutation est omis.

Cet article explique les fonctions en ligne en C ++ par rapport aux macros. Une explication de la macro est donnée. Une comparaison de la fonction en ligne et de la fonction normale est effectuée vers la fin de l'article.

Remarque: l'appel d'une macro dans un programme invoque la macro.

Contenu de l'article

  • Introduction - Voir ci-dessus
  • Définition des macros et des fonctions en ligne
  • fonction en ligne et le compilateur
  • Comparaison des macros et des fonctions en ligne
  • Comparaison des fonctions en ligne et normales
  • Conclusion

Définition des macros et des fonctions en ligne

Macro de type objet et variable en ligne
Il y a une macro de type objet, et il y a une macro de fonction. En conséquence, il existe des variables en ligne et des fonctions en ligne. Considérez le programme C ++ suivant:

#inclure
Utilisation de Namespace Std;
#define var1 "e"
en ligne char var2 = 'e';
int main()

couter << var1 << endl;
couter << var2 << endl;
retour 0;

La sortie est:

E
E

Ce programme a une macro de type objet et une variable en ligne. Chacun détient la valeur, «e». Une macro de type objet commence par #define et n'a aucun indicateur de type. Une variable en ligne commence par «en ligne» et un indicateur de type le suit. Les macros ont un inconvénient par rapport aux types en ligne car ils n'indiquent pas le type. Cela peut entraîner des problèmes de décalage du type dans le programme. Dans la fonction principale (), var1 et var2 sont le code de définition des différentes variables, respectivement.

Remarque: il n'est pas clair si Var1 détient un char ou une chaîne littérale. Notez également qu'une macro, semblable à un objet ou en forme de fonction, ne se termine pas par un point-virgule. Il se termine en appuyant sur la touche Entrée. Une fonction variable ou en ligne en ligne se termine par leur manière normale respective.

Fonction macro et en ligne de fonction
Une macro de fonctionnement est une macro qui prend des arguments. Comme la macro de type objet, partout où la macro en forme de fonction est invoquée dans le programme, le compilateur remplace l'invocation par la définition du code et élimine le temps de commutation (aérien sur la tête) au moment de l'exécution.

Une fonction en ligne est une fonction qui commence par «en ligne». Il a un avantage sur la macro de type fonction avec son type de retour et ses types d'arguments. Une macro de type fonction n'a pas de types d'arguments ni de types de retour. Son type de retour est la valeur finale du nom de macro.

Le programme C ++ suivant a une macro de fonction de fonction et une fonction en ligne, chacune recherche la valeur maximale de deux arguments. La fonction en ligne compare deux entiers et renvoie le plus grand entier. La valeur de retour de la fonction en ligne peut être attribuée à une nouvelle variable int. En revanche, la valeur finale de la macro devient la valeur de la macro.

#inclure
Utilisation de Namespace Std;
#define maxm (a, b) ((a)> (b) ? (un B))
en ligne int maxi (int a, int b)
si (a> b)
retourner a;
si un < b)
retour b;
si (a == b)
retourner a;

int main()

couter << maxM(2.5, 6) << endl;
couter << maxI(3, 7) << endl;
retour 0;

La sortie est:

6
7

Avec la macro, les arguments devraient être de types compatibles. Cela donne à la macro une sorte d'avantage sur la fonction en ligne, dont les types d'arguments devraient être les mêmes, dans ce cas.

Le nom de la macro est maxm. Les arguments sont A et B. Le reste est une sorte de corps de fonction, délimité par des parenthèses. Il dit si (a)> (b) est vrai, alors a devient la valeur de la macro; Sinon, b devient la valeur de la macro.

fonction en ligne et le compilateur

Une fois que le compilateur a substitué l'appel de fonction en ligne par le code de définition de la fonction, le programme doit toujours exécuter. La compilation n'est pas en cours d'exécution ou d'exécution du programme. Avec la fonction normale, les frais généraux (temps de commutation) se produisent lorsque le programme est exécuté (exécuté). Le remplacement macro ou en ligne se produit pendant la compilation, qui est avant exécution (avant que le programme ne soit envoyé au client ou à l'utilisateur).

En fin de compte, le temps de commutation est omis ou gagné pour les macros et les petites fonctions en ligne. Cependant, si la fonction en ligne est grande, le compilateur décidera de faire déclarer la fonction comme indicative, en ligne ou non. Si la fonction déclarée en ligne est grande, il ne peut y avoir aucun gain significatif pour remplacer aucun de ses appels par le corps de son code de fonction. Quant aux critères de la décision du compilateur, - voir plus tard.

Remarque: Une fonction définie dans une définition de classe est une fonction en ligne précédée du spécificateur en ligne.

Comparaison des macros et des fonctions en ligne

La macro peut fonctionner avec différents types tant qu'ils sont compatibles. C'est un avantage. Cependant, cela conduit également à des effets secondaires, ce qui lui donne alors un désavantage. La fonction en ligne testera la validité de ses types d'arguments avant d'utiliser les arguments, ce qui empêche les effets secondaires.

Comparaison des fonctions en ligne et normales

Avantages de la fonction en ligne

  • Il n'y a pas de surcharge d'appel de fonction (pas de temps de commutation).
  • Il y a aussi des frais généraux lorsqu'une fonction normale revient. Avec la fonction en ligne, il n'y a pas de surcharge d'appel de retour.
  • Il existe une optimisation spécifique au contexte possible du corps de fonction avec la fonction en ligne.

Inconvénients de la fonction en ligne

  • Pour chaque appel de la fonction en ligne, le code de définition de la fonction (corps) est répété (a été retapé par le compilateur). Cela peut conduire à un très grand fichier binaire (compilé).
  • Le compilateur prend beaucoup à compiler, car il répète le même code pour tous les appels.

Les fonctions en ligne peuvent ne pas être nécessaires pour de nombreux systèmes intégrés car une taille de programme plus petite est préférable à une vitesse plus élevée.

Il y a d'autres inconvénients - voir plus tard.

Conclusion

La fonction en ligne est comme une macro. Ils servent le même but. Le code de définition remplace chaque invocation ou appel de fonction. Cependant, une fonction en ligne a plus d'avantages par rapport à la macro. Il y a la macro de type objet, et il y a en conséquence la variable en ligne. Il y a la macro de fonction de fonction, et il y a en conséquence la fonction en ligne. Une fonction définie dans une définition de classe est une fonction en ligne, que le spécificateur en ligne le précède ou non.

Pour définir une macro de type objet ou une macro de fonction de fonction, précédemment avec #define suivie du nom de macro. La macro ne spécifie pas ses types de type ou d'arguments de valeur. Pour définir une variable en ligne ou une fonction en ligne, précèdez-la avec le spécificateur, en ligne, suivi du type de retour, puis du nom. Pour la fonction en ligne, le type de retour et les types d'arguments sont précis. Les effets secondaires sont empêchés.

La fonction en ligne présente des avantages globaux par rapport à la macro. Il y a des avantages et des inconvénients lorsque la fonction en ligne est comparée à la fonction normale.