Maison >développement back-end >C++ >Quelle est la différence entre `inline`, `static inline` et `extern inline` en C et C ?

Quelle est la différence entre `inline`, `static inline` et `extern inline` en C et C ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-24 17:51:11268parcourir

What's the Difference Between `inline`, `static inline`, and `extern inline` in C and C  ?

Comprendre extern inline

Dans les langages de programmation C, les fonctions en ligne offrent une astuce au compilateur pour potentiellement optimiser le code en insérant directement le corps de la fonction au point d'invocation plutôt que de générer un appel de sous-programme distinct.

Différences entre les variations

Dans K&R C et C89, il n'y avait pas de sémantique standard pour l'inline, mais de nombreux compilateurs la prenaient en charge avec différentes interprétations. GCC a introduit trois variantes : en ligne, en ligne statique et en ligne externe.

  • en ligne : Suggère une optimisation en ligne, mais une version hors ligne est également générée. Une seule définition peut exister dans les unités de compilation.
  • extern inline : Similaire à inline, mais aucune version hors ligne n'est générée. Cependant, un appel à une version hors ligne peut être effectué, qui doit exister dans une autre unité de compilation.
  • static inline : Génère un fichier-statique, mais non visible de l'extérieur, version en ligne. Aucune version hors ligne n'est générée.

C99 et GNU99

Dans C99, la sémantique de extern inline a été révisée pour refléter le comportement en ligne de GNU89. Inline et static inline sont restés les mêmes.

C

En C , les fonctions en ligne doivent avoir la même définition partout où elles sont utilisées. Plusieurs définitions du même symbole sont gérées par le compilateur/éditeur de liens. Ni static inline ni extern inline ne sont définis en C , bien que certains compilateurs puissent les prendre en charge.

Assurer l'inline avec extern inline

Dans votre scénario spécifique, où vous avez besoin de l'inline pour les fonctions utilisant les macros FILE et LINE, extern inline ne le fait pas garantir que la fonction sera intégrée. Cependant, il s’agit de l’équivalent C99 le plus proche pour obtenir ce comportement souhaité. Si la fonction n'est pas intégrée, le compilateur ou l'éditeur de liens peut générer une erreur.

Différences entre le compilateur et le fournisseur

Le comportement des différents fournisseurs et versions du compilateur peut varier, donc il est toujours conseillé de consulter la documentation spécifique à votre environnement.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn