8
votes

C: Le mot clé en ligne en vaut-il la peine?

vaut-t-il la peine d'utiliser le mot-clé en ligne ou le compilateur est suffisamment intelligent pour savoir quand il doit être conforme à une fonction?


1 commentaires

Une remarque ne vaut pas la réponse: Si vous n'avez pas l'intention d'utiliser la fonction de l'extérieur de l'unité de compilation, le mot-clé "statique" fait plus pour aider le compilateur que "en ligne". Le compilateur peut alors par exemple en ligne indépendamment de la taille s'il existe un seul site d'appel.


4 Réponses :


10
votes

Le compilateur est assez intelligent et contient de multiples métriques pour déterminer si quelque chose vaut la peine d'être inlinité. Mais parfois, cependant, le développeur aura des connaissances sur la manière dont la demande sera exécutée et saura en ligne quelque chose que le compilateur ne fait pas automatiquement. Cependant, je ne ferais jamais de choses en ligne manuellement à moins d'avoir eu des points de repère et que vous avez constaté que l'inine améliorerait mes performances.

Vous pouvez en savoir plus sur la façon dont GCC utilise Inline .


1 commentaires

Est-ce toujours la même chose traitée par le compilateur?



3
votes

C'est toujours la peine d'être explicite sur l'intention.

Il convient également de noter que le compilateur n'a même pas besoin de faire en sorte que cela ne le pense pas non plus.


0 commentaires

15
votes

Oui, il est assez intelligent. Mais ce qui n'a fait aucun progrès au cours des 40 dernières années, c'est la manière dont les programmes sont construits. C'est toujours un fichier de code source à la fois.

Donc, pour obtenir une fonction inline dans plus d'un fichier .C vous mettez la définition de la fonction dans le fichier .h. Et si vous ne les marquez pas en ligne, la liaison se plaindre des multiples définitions.


2 commentaires

+1, Inline Nowadays signifie "Autoriser plusieurs définitions". Le fait qu'il s'agisse également d'un indice du compilateur pour "faire appel à cette fonction rapide" est un effet secondaire sans rapport et non pertinent :-) Je pense que ce n'est pas que "la manière dont les programmes sont construits" n'a pas avancé - certains compilateurs / likers ont. Mais le dénominateur commun le plus bas, que la norme permet, n'a pas avancé.


Dire en ligne signifie "autoriser plusieurs définitions" est tout simplement faux. Cette question concerne le langage C, pas C ++. C n'a pas extern inline fonctions, le mot clé inline n'est pas valide sans statique et plusieurs définitions d'une fonction ne sont jamais autorisées.



0
votes

La norme dit

7.1.2 Spécificateurs de fonctions

2. Une déclaration de fonction (8.3.5, 9.3, 11.4) avec un spécificateur en ligne déclare une fonction inline. Le spécificateur en ligne indique à la mise en œuvre que la substitution en ligne de l'organe de fonction au point d'appel doit être préférée au mécanisme d'appel de fonction habituel. Une implémentation n'est pas nécessaire pour effectuer cette substitution en ligne au point d'appel; Cependant, même si cette substitution en ligne est omise, les autres règles relatives aux fonctions en ligne définies par 7.1.2 sont toujours respectées.

Donc j'habirais en ligne à peut-être
dans html - il est bon d'utiliser la fermeture automatique
tout le temps. Mais on pourrait soutenir que presque tous le navigateur implémentations traiter et
exactement le même, que imo manque le point. < / p>

Comme d'autres l'ont noté, cela n'est probablement pas très pertinent pour la valeur de performance dans ces jours-ci. Mais je pense que cela sert toujours bien comme un mot clé de transmission sémantique et d'intention.


0 commentaires