web-dev-qa-db-fra.com

Qu'est-ce qu'une "unité de traduction" en C ++?

Je lisais à l'époque le "Effective C++" écrit par Meyers et suis tombé sur le terme "unité de traduction".

Quelqu'un pourrait-il m'expliquer s'il vous plaît:

1) C'est quoi exactement

2) Quand devrais-je envisager de l'utiliser lors de la programmation en C++

3) S'il est lié uniquement à C++ ou s'il peut être utilisé avec d'autres langages de programmation

Je pourrais déjà l'utiliser sans connaître le terme ...

213
Harry

De ici : ( lien vers la machine à retourner )

Selon C++ standard ( lien vers une machine à retourner ): une unité de traduction est l'unité de base de la compilation en C++. Il comprend le contenu d'un seul fichier source, ainsi que le contenu des fichiers d'en-tête qu'il inclut directement ou indirectement, moins les lignes qui ont été ignorées à l'aide d'instructions de prétraitement conditionnelles.

Une seule unité de traduction peut être compilée dans un fichier objet, une bibliothèque ou un programme exécutable.

La notion d'unité de traduction est le plus souvent mentionnée dans les contextes de la règle de définition unique et des modèles.

242
JeffH

Une unité de traduction est à toutes fins pratiques un fichier (.c/.cpp), une fois terminée, y compris tous les fichiers d’en-tête.

http://msdn.Microsoft.com/en-us/library/bxss3ska%28VS.80%29.aspx

58
Paul Betts

Une question difficile à répondre définitivement. La norme C++ stipule:

Le texte du programme est conservé dans des unités appelées fichiers sources dans la présente Norme internationale. Un fichier source avec tous les en-têtes (17.4.1.2) et les fichiers source inclus (16.2) via la directive de prétraitement #include, moins les lignes source ignorées par l'une des directives de prétraitement d'inclusion conditionnelle (16.1), est appelé unité de traduction. [Remarque: un programme C++ ne doit pas tous être traduit en même temps. ]

Donc, dans la plupart des cas, une unité de traduction est un fichier source C++ unique et l’en-tête ou d’autres fichiers qu’elle inclut via le mécanisme de pré-traitement #include.

En ce qui concerne vos autres questions:

2) Quand devrais-je envisager de l'utiliser lors de la programmation en C++

Vous ne pouvez pas ne pas en tenir compte - les unités de traduction sont la base d'un programme C++.

3) S'il est lié uniquement à C++ ou s'il peut être utilisé avec d'autres langages de programmation

D'autres langues ont des concepts similaires, mais leur sémantique sera légèrement différente. La plupart des autres langues n'utilisent pas de préprocesseur, par exemple.

27
anon

Le livre le dit assez clairement. Lorsque Meyers fait référence à une "unité de traduction", il désigne un fichier de code source.

9
Ed S.

En plus de l'ODR, l'unité de traduction est importante dans la définition des espaces de nom non nommés, qui remplace l'un des anciens usages de "statique".

Je suppose que je n'ai toujours pas assez de points pour ajouter un commentaire sous la réponse en haut.

4
Allan Stokes

Une unité de traduction est un code qui est transmis au compilateur proprement dit. Cela signifie généralement que la sortie de l'exécution du préprocesseur sur le fichier .c.

3
sigjuice

Les programmes C et C++ consistent en un ou plusieurs fichiers source, chacun contenant du texte du programme. Un fichier source, ainsi que ses fichiers d'inclusion (fichiers inclus à l'aide de la directive de préprocesseur #include) mais n'incluant pas les sections de code supprimées par les directives de compilation conditionnelle telles que #if, est appelé une "unité de traduction".

2
ganesh marmat

Selon MSDN : Les programmes C et C++ consistent en un ou plusieurs fichiers source, chacun contenant du texte du programme. Un fichier source, ainsi que ses fichiers d'inclusion (fichiers inclus à l'aide de la directive de préprocesseur #include) mais n'incluant pas les sections de code supprimées par les directives de compilation conditionnelle telles que #if, est appelé une "unité de traduction".

1
rahul

Comme d'autres l'ont déjà dit, une unité de traduction est essentiellement le contenu d'un fichier source après prétraitement. C'est la plus haute production de la grammaire linguistique; vous n'auriez besoin de vous en préoccuper que si vous écriviez un compilateur C ou C++.

0
John Bode

À mon avis, une "unité de traduction" est généralement un fichier source unique "post-prétraitement". Vous pouvez obtenir plus de détails sur cette page MSDN. http://msdn.Microsoft.com/en-us/library/bxss3ska (v = vs.80) .aspx

0
Yang

Chaque fichier cpp/c (implémentation) sera converti en un en-tête d'unité de traduction (c'est-à-dire un fichier objet (.obj)) dans le fichier cpp sera remplacé par le texte réel des fichiers d'en-tête.

0
yesraaj