web-dev-qa-db-fra.com

Quelle est la différence entre un fichier d'en-tête et une bibliothèque?

L'une des choses que j'ai du mal à comprendre, c'est comment fonctionne le compilateur. J'ai beaucoup de difficultés avec ça, mais en particulier je continue à mélanger les en-têtes et les bibliothèques. Si quelqu'un pouvait éclaircir un peu les choses, ce serait bien.

70
Xonara

Pensez aux deux comme ça (Avertissement: il s'agit d'une analogie de très haut niveau;) ..

  • en-tête est un numéro de téléphone que vous pouvez appeler, tandis que ...
  • ... la bibliothèque est la personne réelle que vous pouvez atteindre!

C'est la différence fondamentale entre "interface" et "implémentation"; l'interface (en-tête) vous indique comment pour appeler certaines fonctionnalités (sans savoir comment cela fonctionne), tandis que le l'implémentation (bibliothèque) est la fonctionnalité réelle.

Remarque: Le concept est tellement fondamental, car il vous permet une flexibilité: vous pouvez avoir le même en-tête pour différentes bibliothèques (c'est-à-dire que la fonctionnalité est exactement appelée de la même manière), et chaque bibliothèque peut implémenter la fonctionnalité d'une manière différente. En conservant la même interface, vous pouvez remplacer les bibliothèques sans changer votre code .

Et: vous pouvez changer l'implémentation de la bibliothèque sans casser le code appelant!

111
beef2k

Un fichier d'en-tête est généralement utilisé pour définir une interface ou un ensemble d'interfaces dans une application. Considérez un fichier d'en-tête comme quelque chose qui montre les fonctionnalités externes d'un programme tout en omettant les détails de mise en œuvre technique.

Par exemple, si vous optimisiez un programme, vous modifieriez très probablement le fichier source (.cpp) pour améliorer l'algorithme, mais le fichier d'en-tête ne changerait pas, car les clients externes appellent toujours les méthodes en utilisant le même ensemble de paramètres et valeurs de retour.

Dans un langage orienté objet comme C++, un fichier d'en-tête comprend généralement les éléments suivants:

  • Description de la classe et hiérarchie d'héritage
  • Membres et types de données de classe
  • Méthodes de classe

Bien que rien n'empêche le code d'être implémenté dans un fichier d'en-tête, cela n'est généralement pas favorisé car il peut introduire un couplage et des dépendances supplémentaires dans le code.

Dans certains cas (par exemple les classes modèles), l'implémentation doit être définie dans le fichier d'en-tête pour des raisons techniques.


A bibliothèque est une collection de code que vous souhaitez mettre à la disposition d'un programme ou d'un groupe de programmes. Il comprend l'implémentation d'une interface particulière ou d'un ensemble d'interfaces.

Le code est défini dans une bibliothèque pour éviter la duplication de code et encourager la réutilisation. Une bibliothèque peut être liée statiquement (.lib) ou liée dynamiquement (.dll):

  • Une bibliothèque liée statiquement définit un ensemble de symboles d'exportation (qui peuvent être considérés comme des définitions de méthode) qui sont ensuite liés à l'exécutable final (.exe) pendant l'étape de liaison du processus de génération. Il a l'avantage d'un temps d'exécution plus rapide (car la bibliothèque n'a pas besoin d'être chargée dynamiquement), au détriment d'un binaire plus grand (car les méthodes sont essentiellement répliquées dans le fichier exécutable).

  • Une bibliothèque liée dynamiquement est liée pendant l'exécution d'un programme, plutôt que la liaison d'un programme. Il est utile lorsque plusieurs programmes doivent réutiliser les mêmes méthodes et est largement utilisé dans des technologies telles que COM.

51

Une chose qui peut vous dérouter est que le mot bibliothèque peut avoir plusieurs significations en C++. Un sens a été bien discuté ici:

Un ensemble de fonctions pouvant être liées dans un fichier binaire. Ceux-ci peuvent être liés statiquement ou dynamiquement.

Mais il existe un autre type de bibliothèque: les bibliothèques dites d'en-tête uniquement (y compris des parties de STL, TR1 et Boost). Ceux-ci n'existent pas sous une forme binaire distincte, donc le mot bibliothèque ne fait pas référence à un fichier binaire particulier mais plutôt à un ensemble de fichiers d'en-tête inclus.

J'espère que cela t'aides.

9
jwfearn

Une bibliothèque est du code, compilé en un ensemble de fichiers objets. Les fichiers objets contiennent le code machine compilé et les déclarations de données utilisées par le code.

Un fichier d'en-tête définit interface à une bibliothèque: il vous indique comment utiliser correctement la bibliothèque. En C/C++, un fichier d'en-tête vous donne une liste de noms de fonctions et comment appeler ces fonctions: le nombre et les types de paramètres qu'ils prennent, le type de retour, la convention d'appel, etc. Les fichiers d'en-tête ont beaucoup d'autres choses dans eux aussi, mais à la fin, il se résume à un ensemble de règles pour appeler le code de la bibliothèque.

7
Adam Rosenfield

L'en-tête contient uniquement la déclaration, tandis que les bibliothèques contiennent également l'implémentation.

7
Moayad Mardini

Si la bibliothèque dans les langages de programmation est une bibliothèque générale, alors de nombreux livres présents dans la bibliothèque peuvent être comparés aux fonctions/méthodes dans les langages. Et les fichiers d'en-tête peuvent également être comparés au numéro de ligne du livre Supposons qu'il y ait un livre dans une bibliothèque à Hyderabad et dans cette bibliothèque, ce livre est présent dans la ligne numéro 24 ... De la même manière que l'adresse de la bibliothèque est donnée en utilisant l'espace de noms std (pour la bibliothèque standard) et la ligne No est donnée par le fichier d'en-tête où tous les livres (méthodes dans ce cas) du même temps (toutes les méthodes liées aux flux d'entrée/sortie) sont mis en place

2
user2131930

Travail du fichier HEADER et de la BIBLIOTHEQUE dans un programme.

Un fichier d'en-tête contient les liens vers bibliothèques (les bibliothèques contiennent des fonctions et méthodes standard), un compilateur reconnaît les fonctions standard utilisées dans le code source via un préprocesseur, qui résout toutes les directives (les directives sont les lignes du programme précédées du signe # qui incluent) avant la compilation proprement dite du programme.

Merci d'avoir lu!

1
Nauman Khan

Un fichier d'en-tête décrit comment appeler la fonctionnalité, une bibliothèque contient le code compilé qui implémente cette fonctionnalité.

1
sharptooth

Je pense que la bibliothèque est un paquet de code qui est réutilisé plusieurs fois et que ce code est précompilé, il est donc disponible sous forme standard afin que nous n'ayons pas à écrire ce code pour chaque programme que nous développons. Et le fichier d'en-tête contient la référence à ce code de manière simple, les fonctions que nous utilisons dans notre programme comme "cin" et "cout" sont entièrement définies dans une bibliothèque standard, et les fichiers d'en-tête comme le fichier d'en-tête iostream contiennent la référence à ce code. Ainsi, lorsque nous compilons notre code, nous obtenons simplement le précompilé pour cin et cout, et nous n'avons pas à écrire le code pour cin et cout à chaque fois que nous l'utilisons. Ou D'une manière plus simple, nous pouvons dire qu'une bibliothèque contient des codes pour toutes les fonctions et qu'un fichier d'en-tête est un moyen d'atteindre ce code.

1
shivam

HEADER FILE est celui dans lequel la déclaration d'une fonction est écrite. En utilisant le fichier d'en-tête, nous pouvons accéder à une fonction particulière

tandis que

LIBRARY FILE est celui dans lequel la définition d'une fonction particulière est écrite. MATH.H est un fichier d'en-tête tandis que MATH.LIB est un fichier de bibliothèque.

1
vipin

Une bibliothèque est une collection d'objets similaires pour une utilisation occasionnelle. Il contient généralement des programmes sous forme d'objet ou de code source, des modèles, etc.

Un fichier d'en-tête est l'emplacement (interface) de la bibliothèque

1

Pour paraphraser une blague classique, la différence est que la bibliothèque a un fichier d'en-tête alors que le fichier d'en-tête n'a pas de bibliothèque.

0
Tiberiu Ana

Les bibliothèques sont comme des momies mortes, enveloppées de longs fils blancs. Ils sont morts. La seule façon de les libérer est par le biais de fichiers d'en-tête. Les fichiers d'en-tête contiennent des moyens de leur donner vie et ils peuvent être actualisés plusieurs fois (réutilisation du code).

0
jatinpunia

L'en-tête est généralement utilisé pour contenir les prototypes. Les en-têtes se développent au moment du prétraitement afin qu'au moment de la compilation, le code puisse avoir accès aux déclarations/prototypes de fonction pertinents.

La bibliothèque est le logiciel réel qui contient les définitions des prototypes de fonctions (présentes dans l'en-tête). La bibliothèque est utilisée au moment du lien. Les définitions (présentes dans la bibliothèque) sont résolues au moment de la liaison.

0
Syed.Waris

Vous pouvez considérer cet exemple pour comprendre- Math.h Est un fichier d'en-tête qui inclut le prototype des appels de fonction comme sqrt(), pow() etc, tandis que libm.lib , libmmd.lib, libmmd.dll Sont quelques-unes des bibliothèques mathématiques. En termes simples, un fichier d'en-tête est comme une carte de visite et les bibliothèques sont comme une vraie personne, nous utilisons donc la carte de visite (fichier d'en-tête) pour atteindre la personne réelle (bibliothèque).

0
Noshiii