Подтвердить что ты не робот

Что делает #include на самом деле?

В C (или языке, основанном на C), можно с радостью использовать это утверждение:

#include "hello.h";

И воила, каждая функция и переменная в hello.h является автома- тически применимой.

Но что это на самом деле? Я просмотрел документы и учебники компилятора и провел некоторое время в Интернете, но единственное впечатление, которое я мог сформировать в магической команде #include, - это то, что она "копирует" содержимое hello.h вместо этой строки. Там должно быть больше.

4b9b3361

Ответ 1

Логически, это копирование/вставка - это именно то, что происходит. Боюсь, что с ним больше нет. Однако вам не нужен ;.

В вашем конкретном примере рассматривается спецификация, раздел 6.10.2. Включение исходного файла, пункт 3:

Директива предварительной обработки формы

# include " q- char -sequence " new-line

вызывает замену этой директивы всем содержимым исходного файла, идентифицированного указанной последовательностью между разделителями ".

Ответ 2

Это (copy/paste) - это именно то, что делает #include "header.h".

Обратите внимание, что это будет отличаться для #include <header.h> или когда компилятор не сможет найти файл "header.h" и вместо него пытается #include <header.h>.

Ответ 3

Не совсем, нет. Компилятор сохраняет исходный дескриптор файла в стеке и открывает файл #include d; когда он достигает конца этого файла, он закрывает его и возвращается к исходному дескриптору файла. Таким образом, он может вложить файлы #include d почти произвольно.

Ответ 5

Это хорошая ссылка, чтобы ответить на этот вопрос.

http://msdn.microsoft.com/en-us/library/36k2cdd4.aspx

Обычно #include и #include "path-name" просто различаются в порядке поиска предварительного процессора

Ответ 6

Оператор "# include" "захватывает внимание" препроцессора (процесс, который происходит до того, как ваша программа действительно скомпилирована) и "сообщает" препроцессору, чтобы включить в него все, что следует за оператором "# include". В то время как предварительный процессор может попросить сделать совсем немного, в этом случае ему предлагается распознать заголовочный файл (который обозначается символом ".h", следующим за названием этого заголовка, указывая на то, что это заголовок). Теперь заголовок представляет собой файл, содержащий объявления C и определения функций, явно не определенных в вашем коде. Что это значит? Ну, если вы хотите использовать функцию или определить специальный тип переменной, и знаете, что эти функции/определение определены в другом месте (скажем, в стандартной библиотеке), вы можете просто включить (# include) заголовок, который, как вы знаете, содержит что вам нужно. В противном случае, каждый раз, когда вы хотите использовать функцию печати (например, в вашем случае), вам придется воссоздать функцию печати. Если он явно не определен в вашем коде, и вы не # включаете заголовочный файл с помощью функции, которую вы используете, ваш компилятор будет жаловаться на то, что "Эй! Я не вижу, где эта функция определена, поэтому я не" Не знаю, что с этой функцией undefined в вашем коде!".