Maison >développement back-end >C++ >Pourquoi les définitions de fonctions en ligne en C doivent-elles résider dans les fichiers d'en-tête ?

Pourquoi les définitions de fonctions en ligne en C doivent-elles résider dans les fichiers d'en-tête ?

DDD
DDDoriginal
2024-12-08 12:47:13161parcourir

Why Must Inline Function Definitions in C   Reside in Header Files?

Comprendre les exigences de placement pour les définitions de fonctions en ligne dans les fichiers d'en-tête

En C, une fonction en ligne est destinée à être développée en ligne au moment de son appel, plutôt que compilé dans un appel de fonction distinct. Bien que la déclaration d'une fonction membre de classe comme inline ne soit pas nécessaire, son implémentation doit être définie en ligne. Cela soulève la question de savoir pourquoi l'implémentation en ligne doit résider dans le fichier d'en-tête.

Pour comprendre cette exigence, nous devons approfondir le concept de règle de définition unique (ODR) pour les fonctions en ligne. L'ODR stipule qu'une fonction en ligne ne peut avoir qu'une seule définition définitive pour toutes les unités de traduction qui l'utilisent. Cela signifie que si une fonction en ligne est définie dans plusieurs fichiers sources, leurs définitions doivent être identiques.

Le respect de l'ODR est crucial lorsque vous travaillez avec des fonctions en ligne. Si les définitions ne sont pas identiques, l'éditeur de liens rencontrera des erreurs de symboles externes non résolues, comme illustré dans l'exemple fourni dans la question.

L'approche la plus simple pour garantir la conformité ODR consiste à définir la fonction en ligne dans un fichier d'en-tête. En incluant le fichier d'en-tête dans chaque fichier source qui utilise la fonction, des définitions identiques sont automatiquement appliquées.

Cependant, il est important de noter qu'une définition de fonction en ligne ne doit pas nécessairement résider dans un fichier d'en-tête. Il est possible de les définir au sein d'un seul fichier source à condition que certaines conditions soient remplies. Premièrement, la fonction ne doit pas être déclarée en ligne. Une fonction non-inline n'implique pas que le compilateur ne peut pas effectuer d'optimisation en ligne.

La décision de déclarer ou non une fonction en ligne doit être prise en fonction de la version de l'ODR qui correspond le mieux à vos besoins. L'ajout en ligne sans tenir compte des limitations qui en résultent n'est peut-être pas toujours le choix le plus approprié.

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