Вопрос

Когда мы видим #include <iostream>, как говорят Директива препроцессора.

#include ---> Директива

И я думаю:

<iostream> ---> Препроцессор

Но что подразумевается под «препроцессором» и «Директивой»?

Это было полезно?

Решение

Это может помочь подумать о отношениях между «директивой» и «указанием» (т.е. приказом). «Предварительные директивы» - это указания к препроцессор об изменениях он должен внести в код до более поздних стадий компиляции. Но что такое препроцессор? Ну, это имя немного рекурсивное: оно просто для обработки текстового исходного кода, изменяя его различными способами. Этот дополнительный процесс дает большую гибкость в выборе, объединении и даже генерировании частей программы.

РЕДАКТИРОВАТЬ АДРЕДИНАЦИЯ @SWENGINER'S Comment: Подумайте о том, что препроцессор является отдельной программой, которая изменяет программу C ++, а затем дает свой вывод «реальному» компилятору C ++ (в значительной степени это было так, как раньше). Когда препроцессор видит «#include», он думает «ааахх - это то, что я понимаю, я позабочусь об этом, а не просто передавать его вслепую к компилятору C ++». Таким образом, он ищет ряд каталогов (некоторые стандартные, такие как /usr /include и везде, где компилятор установил свои собственные заголовки, а также другие, указанные с использованием -i в командной линии) в поисках файла, называемого «iostream». Когда он находит его, он заменяет строку в программе ввода, говоря, что «#include» с полным содержанием файла, называемого «iostream», добавляя результат к выводу. Но он затем переходит к первой строке, которую он читает из файла «iostream», ищет больше директив, которые она понимает.

Итак, препроцессор очень прост. Это может понять #include, #define, #if/ #elif/ #endif, #warning, но не так много. Это не имеет значения, что такое «int», шаблон, класс или любой из этих «настоящих» материалов C ++. Это больше похоже на какой -то автоматизированный редактор, который разрезает и встает на части файлов и кодирует, подготавливая программу, которую в конечном итоге будет просмотреть и обрабатывать собственный компилятор C ++. Препроцессор все еще очень полезен, потому что он знает, как найти части программы во всех этих различных каталогах (следующий этап в компиляции ничего не должен знать об этом), и он может удалить код, который может работать на некоторых других Компьютерная система, но не будет действительна в использовании. Это также может позволить программе использовать короткие, краткие макро -операторы, которые генерируют много реального кода C ++, что делает программу более управляемой.

Другие советы

#include это Директива препроцессора, <iostream> это просто аргумент Поставляется в дополнение к этой директиве, которая в данном случае является именем файла.

Некоторые директивы препроцессора принимают аргументы, некоторые нет, например,

#define FOO 1

#ifdef _NDEBUG
    ....
#else
    ....
#endif

#warning Untested code !

Общая особенность заключается в том, что все они начинают с #.

В Старые времена Препроцессор был отдельным инструментом, который предварительно обработал исходный код, прежде чем передавать его на фронт компилятора, выполнение макро-замены, включая файлы заголовков и т. Д. Просто делает ту же работу.

Директивы препроцессора, такие как #define а также #ifdef, как правило, используются для того, чтобы сделать исходные программы легко измениться и легко компилировать в различных средах выполнения. Директивы в исходном файле сообщают препроцессору выполнить конкретные действия. Например, препроцессор может заменить токены в тексте, вставить содержимое других файлов в исходный файл ...

#include предварительная директива, означающая, что она используется препроцессор часть компилятора. Это происходит до «процесса компиляции. А #include необходимо указать «что» включить, это предоставляется аргументом iostream. Анкет Это говорит о препроцессоре включить файл iostream.h.

Дополнительная информация:

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top