Что делает #include на самом деле?
В C (или языке, основанном на C), можно с радостью использовать это утверждение:
#include "hello.h";
И воила, каждая функция и переменная в hello.h
является автома- тически применимой.
Но что это на самом деле? Я просмотрел документы и учебники компилятора и провел некоторое время в Интернете, но единственное впечатление, которое я мог сформировать в магической команде #include
, - это то, что она "копирует" содержимое hello.h
вместо этой строки. Там должно быть больше.
Ответы
Ответ 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 почти произвольно.
Ответ 4
Это часть препроцессора. Посмотрите http://en.wikipedia.org/wiki/C_preprocessor#Including_files. И да, это просто копировать и вставлять.
Ответ 5
Это хорошая ссылка, чтобы ответить на этот вопрос.
http://msdn.microsoft.com/en-us/library/36k2cdd4.aspx
Обычно #include и #include "path-name" просто различаются в порядке поиска предварительного процессора
Ответ 6
Оператор "# include" "захватывает внимание" препроцессора (процесс, который происходит до того, как ваша программа действительно скомпилирована) и "сообщает" препроцессору, чтобы включить в него все, что следует за оператором "# include". В то время как предварительный процессор может попросить сделать совсем немного, в этом случае ему предлагается распознать заголовочный файл (который обозначается символом ".h", следующим за названием этого заголовка, указывая на то, что это заголовок). Теперь заголовок представляет собой файл, содержащий объявления C и определения функций, явно не определенных в вашем коде. Что это значит? Ну, если вы хотите использовать функцию или определить специальный тип переменной, и знаете, что эти функции/определение определены в другом месте (скажем, в стандартной библиотеке), вы можете просто включить (# include) заголовок, который, как вы знаете, содержит что вам нужно. В противном случае, каждый раз, когда вы хотите использовать функцию печати (например, в вашем случае), вам придется воссоздать функцию печати. Если он явно не определен в вашем коде, и вы не # включаете заголовочный файл с помощью функции, которую вы используете, ваш компилятор будет жаловаться на то, что "Эй! Я не вижу, где эта функция определена, поэтому я не" Не знаю, что с этой функцией undefined в вашем коде!".