2010-09-06 4 views
8

Cela vaut-il la peine d'utiliser le mot-clé inline ou le compilateur est assez intelligent pour savoir quand il doit intégrer une fonction?C: Le mot-clé inline en vaut-il la peine?

+4

Une remarque qui ne mérite pas de réponse: si vous n'avez pas l'intention d'utiliser la fonction depuis l'extérieur de l'unité de compilation, le mot-clé "static" fait plus pour aider le compilateur que "inline". Le compilateur peut alors par exemple inline indépendamment de la taille s'il y a un seul site d'appel. –

Répondre

9

Le compilateur est assez intelligent et dispose de plusieurs métriques pour déterminer si quelque chose vaut la peine d'être ajouté. Mais parfois, le développeur aura des connaissances sur la façon dont l'application va être exécutée et saura intégrer quelque chose que le compilateur ne fait pas automatiquement. Cependant, je n'incrirais jamais les choses manuellement à moins d'avoir fait quelques benchmarks et trouvé que inline améliorerait mes performances.

Vous pouvez en savoir plus sur comment GCC uses inline.

3

Cela vaut toujours la peine d'être explicite à propos de l'intention.

Cela vaut également la peine de noter que le compilateur n'a même pas besoin d'être intégré s'il pense qu'il vaut mieux ne pas le faire aussi.

13

Oui, c'est assez intelligent. Mais ce qui n'a pas progressé au cours des 40 dernières années, c'est la façon dont les programmes C sont construits. C'est toujours un fichier de code source à la fois. Donc, pour obtenir une fonction inline dans plus d'un fichier .c, mettez la définition de la fonction dans le fichier .h. Et si vous ne les marquez pas en ligne, l'éditeur de liens se plaindra des multiples définitions.

+2

+1, 'inline' signifie de nos jours" autoriser plusieurs définitions ". Le fait que c'est aussi un indice pour le compilateur de "rendre cette fonction rapide" est un effet secondaire sans rapport et non pertinent :-) Je pense que ce n'est pas que "la façon dont les programmes sont construits" n'a pas avancé - certains compilateurs/linkeurs avoir. Mais le plus petit dénominateur commun, que la norme permet, n'a pas avancé. –

+9

Dire "inline" signifie "permettre plusieurs définitions" est tout simplement faux. Cette question concerne le langage C, pas C++. C n'a pas de fonctions 'extern inline', le mot-clé' inline' est invalide sans 'static', et plusieurs définitions d'une fonction ne sont jamais autorisées. –

0

La norme dit

7.1.2 Fonction spécificateurs

2.   Une déclaration de fonction (8.3.5, 9.3, 11.4) avec un prescripteur en ligne déclare une fonction en ligne. Le spécificateur en ligne indique à l'implémentation que la substitution en ligne du corps de la 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 pour les fonctions en ligne définies au § 7.1.2 doivent toujours être respectées.

donc je comparerai inline à peut-être <br /> en HTML - il est bon d'utiliser l'auto-fermeture <br /> tout le temps. Mais on pourrait soutenir que presque toutes les implémentations du navigateur traitent <br> et <br /> exactement la même chose, ce qui manque à l'OMI.

Comme d'autres l'ont noté, ce n'est probablement pas très pertinent pour la valeur de la performance de nos jours. Mais je pense qu'il sert encore bien comme un mot-clé sémantique, l'intention de transmettre.

Questions connexes