#include Директива должна определить заголовок или исходный файл , который может быть обработан реализацией.
Директива предварительной обработки формы
# include < h-char-sequence > new-line
ищет последовательность выполнения определенных мест для заголовка определен однозначно указанной последовательностью между < и > разделителями, и приводит к замене этой Директивы всего содержимого заголовка. То, как указываются места или идентифицируется заголовок, определяется реализацией.
Директива предварительной обработки формы
# include " q-char-sequence " new-line
вызывает замену этой директивы всем содержимым исходного файла, идентифицированного указанной последовательностью между " разделителями. Именованный исходный файл ищется способом, определяемым реализацией. Если этот поиск не поддерживается или поиск завершается неудачно, директива обрабатывается повторно, как если бы она читалась
# include < h-char-sequence > new-line
с идентичной содержащейся последовательностью (включая > символы, если они есть) из исходной директивы.
Директива предварительной обработки формы
# include pp-tokens new-line
(что не соответствует ни одной из двух предыдущих форм) разрешено. Маркеры предварительной обработки после include в директиве обрабатываются так же, как и в обычном тексте (т. Е. Каждый идентификатор, определенный в настоящее время как имя макроса, заменяется его списком замены токенов предварительной обработки). Если директива, полученная после всех замен, не соответствует одной из двух предыдущих форм, поведение не определено.147 Метод, с помощью которого последовательность токенов предварительной обработки между a < и > парой токенов предварительной обработки или парой " символов объединяется в один токен предварительной обработки имени заголовка, определяется реализацией.
Реализация должна обеспечивать уникальные отображения для последовательностей, состоящих из одного или нескольких nondigits символов, digits за которыми следует точка (.) и один nondigit. Первый символ не должен быть digit. Реализация может игнорировать различия в алфавитном регистре.
#include Предобработки директива может появиться в исходном файле , который был считан из - за #include директивы в другом файле, вплоть до реализации определенных вложенности предела.
[ Note: Хотя реализация может предоставлять механизм для предоставления произвольных исходных файлов доступным для < > поиска, в целом программисты должны использовать < > форму для заголовков, предоставленных с реализацией, и " " форму для источников, находящихся вне контроля реализации. Например:
#include <stdio.h> #include <unistd.h> #include "usefullib.h" #include "myprog.h"
— end note ]
[ Example: Это иллюстрирует замененные #include макросами директивы:
#if VERSION == 1
#define INCFILE "vers1.h"
#elif VERSION == 2
#define INCFILE "vers2.h" // and so on
#else
#define INCFILE "versN.h"
#endif
#include INCFILE
— end example ]
Обратите внимание, что смежные строковые литералы не объединяются в один строковый литерал (см. Этапы перевода в [lex.phases]); таким образом, раскрытие, которое приводит к появлению двух строковых литералов, является недопустимой директивой.