Article de reference

Unité de traduction (programmation)

Dans la terminologie des langages de programmation C et C++ , une unité de traduction (ou plus simplement une unité de compilation) est l'entrée ultime d'un compilateur C ou C++...

Dans la terminologie des langages de programmation C et C++ , une unité de traduction (ou plus simplement une unité de compilation) est l'entrée ultime d'un compilateur C ou C++ à partir de laquelle un fichier objet est généré. Une unité de traduction se compose approximativement d'un fichier source après qu'il a été traité par le préprocesseur C , ce qui signifie que les fichiers d'en-tête répertoriés dans #includeles directives sont littéralement inclus , des sections de code #ifndefpeuvent être incluses et des macros ont été développées.

Contexte

Le programme AC se compose d' unités appelées fichiers sources (ou fichiers de prétraitement ), qui, en plus du code source, incluent des directives pour le préprocesseur C. Une unité de traduction est la sortie du préprocesseur C – un fichier source après avoir été prétraité .

Le prétraitement consiste notamment à étendre un fichier source pour remplacer de manière récursive toutes #includeles directives par le fichier littéral déclaré dans la directive (généralement des fichiers d'en-tête , mais éventuellement d'autres fichiers source) ; le résultat de cette étape est une unité de traduction de prétraitement . Les étapes suivantes comprennent , entre autres, l'expansion macro des #definedirectives et la compilation conditionnelle des #ifdefdirectives ; cela traduit l'unité de traduction de prétraitement en une unité de traduction . À partir d'une unité de traduction, le compilateur génère un fichier objet , qui peut être traité ultérieurement et lié (éventuellement avec d'autres fichiers objets) pour former un programme exécutable .

Notez que le préprocesseur est en principe indépendant du langage et qu'il s'agit d'un préprocesseur lexical , fonctionnant au niveau de l'analyse lexicale . Il n'effectue pas d'analyse syntaxique et est donc incapable d'effectuer un traitement spécifique à la syntaxe C. L'entrée du compilateur est l'unité de traduction et il ne voit donc aucune directive du préprocesseur, qui ont toutes été traitées avant le début de la compilation. Bien qu'une unité de traduction donnée soit fondamentalement basée sur un fichier, le code source réel introduit dans le compilateur peut sembler sensiblement différent du fichier source que le programmeur visualise, notamment en raison de l'inclusion récursive des en-têtes.

Portée

Les unités de traduction définissent une portée , approximativement la portée du fichier , et fonctionnent de manière similaire à la portée du module ; dans la terminologie C, cela est appelé liaison interne , qui est l'une des deux formes de liaison en C. Les noms (fonctions et variables) déclarés en dehors d'un bloc fonctionnel peuvent être visibles soit uniquement dans une unité de traduction donnée, auquel cas ils sont dits avoir une liaison interne - ils ne sont pas visibles pour l'éditeur de liens - soit peuvent être visibles pour d'autres fichiers objets, auquel cas ils sont dits avoir une liaison externe , et sont visibles pour l'éditeur de liens.

Le langage C ne possède pas de notion de modules. Cependant, les fichiers objets séparés (et donc aussi les unités de traduction utilisées pour produire les fichiers objets) fonctionnent de manière similaire aux modules séparés, et si un fichier source n'inclut pas d'autres fichiers sources, la liaison interne (portée de l'unité de traduction) peut être considérée comme « portée du fichier, incluant tous les fichiers d'en-tête ».

Organisation du code

La majeure partie du code d'un projet est généralement contenue dans des fichiers avec un .csuffixe (ou .cpp, .cxxou .ccpour C++ , qui .cppest le plus couramment utilisé). Les fichiers destinés à être inclus ont généralement un .hsuffixe ( .hppou .hhsont également utilisés pour C++, mais .hc'est le plus courant même pour C++), et ne contiennent généralement pas de définitions de fonctions ou de variables pour éviter les conflits de noms lorsque les en-têtes sont inclus dans plusieurs fichiers sources, comme c'est souvent le cas. Les fichiers d'en-tête peuvent être, et sont souvent, inclus dans d'autres fichiers d'en-tête. Il est de pratique courante que tous .cles fichiers d'un projet incluent au moins un .hfichier.

Plus d articles de Worldlex Wiki

Revenez a l index pour explorer davantage de pages sur l histoire, la science, la culture, la geographie et la societe en francais.

Explorer l index