2011-01-21 6 views
4

Lorsque nous voyons #include <iostream>, il est dit être une directive préprocesseur.Directives du préprocesseur

#include ---> directive

Et, je pense:

<iostream> ---> préprocesseur

Mais, ce que l'on entend par "préprocesseur" et "directive"?

Répondre

5

Il peut être utile de penser à la relation entre une "directive" et étant "directives données" (à savoir les commandes). Les "directives du préprocesseur" sont des instructions au préprocesseur sur les modifications qu'il devrait apporter au code avant les étapes ultérieures de la compilation. Mais, quel est le préprocesseur? Eh bien, son nom est un peu récursif: il est simplement là pour traiter le code source textuel, en le modifiant de différentes manières. Ce processus supplémentaire donne plus de flexibilité dans la sélection, la combinaison et même la génération de parties du programme. EDIT adressant @ Commentaire de SWEngineer: Pensez au préprocesseur étant un programme séparé qui modifie le programme C++, puis donne sa sortie au "vrai" compilateur C++ (c'est à peu près comme c'était le cas auparavant).Lorsque le préprocesseur voit "#include" il pense "ahhha - c'est quelque chose que je comprends, je vais m'en occuper et ne pas le passer aveuglément au compilateur C++". Ainsi, il recherche un certain nombre de répertoires (certains standards comme/usr/include et où le compilateur a installé ses propres en-têtes, ainsi que d'autres spécifiés en utilisant -I sur la ligne de commande) recherchant un fichier appelé "iostream". Quand il le trouve, il remplace alors la ligne dans le programme d'entrée en disant "#include" avec le contenu complet du fichier appelé "iostream", en ajoutant le résultat à la sortie. MAIS, il passe ensuite à la première ligne lue dans le fichier "iostream", à la recherche de plus de directives qu'il comprend. Par conséquent, le préprocesseur est très simple. Il peut comprendre #include, #define, # if/# elif/# endif, #warning, mais pas grand-chose d'autre. Il n'a pas la moindre idée de ce qu'est un "int", un template, une classe, ou n'importe lequel de ces "vrais" trucs en C++. C'est plutôt un éditeur automatique qui coupe et colle des parties de fichiers et de code, préparant le programme que le compilateur C++ verra et traitera. Le préprocesseur est toujours très utile, car il sait comment trouver des parties du programme dans tous ces répertoires différents (l'étape suivante de la compilation n'a pas besoin de savoir quoi que ce soit à ce sujet), et il peut supprimer du code qui pourrait fonctionner sur d'autres système informatique mais ne serait pas valide sur celui en usage. Il peut également permettre au programme d'utiliser des instructions de macro courtes et concises qui génèrent beaucoup de code C++ réel, rendant le programme plus gérable.

+0

@Tony. Pouvez-vous simplement l'expliquer en termes de par exemple "#include " à titre d'exemple? Depuis que je l'obtiens presque. Merci. – Simplicity

+0

@Tony. (Les "directives du préprocesseur" sont des instructions au préprocesseur concernant les modifications qu'il devrait apporter au code avant les étapes ultérieures de la compilation). Quels sont les exemples de changements ici? Merci. – Simplicity

+0

@Tony. Désolé pour mes nombreuses questions ici. En ce qui concerne le "préprocesseur", pouvez-vous le décrire un peu plus en détail? Merci. – Simplicity

8

#include est la directive préprocesseur, <iostream> est juste un argument fourni en plus de cette directive, qui dans ce cas se trouve être un nom de fichier.

Certaines directives de préprocesseur prennent des arguments, d'autres non, par ex. La caractéristique commune est qu'ils commencent tous par #.

Dans Olden temps le préprocesseur est un outil distinct qui code source pré-traitée avant de passer au compilateur frontal, d'effectuer des substitutions macro et y compris les fichiers d'en-tête, etc. Ces jours-ci le préprocesseur est habituellement une partie intégrante du compilateur, mais il fait essentiellement le même travail.

0

Les directives de préprocesseur, telles que #define et #ifdef, sont généralement utilisées pour rendre les programmes sources faciles à modifier et à compiler facilement dans différents environnements d'exécution. Les directives du fichier source indiquent au préprocesseur d'effectuer des actions spécifiques. Par exemple, le préprocesseur peut remplacer des jetons dans le texte, insérer le contenu d'autres fichiers dans le fichier source ...

#include est une directive préprocesseur ce qui signifie qu'il est utilisé par le préprocesseur partie du compilateur. Cela arrive 'avant' le processus de compilation. Le #include doit spécifier "quoi" inclure, ceci est fourni par l'argument iostream. Cela indique au préprocesseur d'inclure le fichier iostream.h.

Plus d'informations:

+0

"#include doit spécifier 'quoi' à inclure, ceci est fourni par l'argument iostream, ce qui indique au préprocesseur d'inclure le fichier iostream.h." Non, ça ne l'est pas. Il dit au préprocesseur d'inclure le fichier 'iostream'. –

Questions connexes