T.C. оставил интересный комментарий к моему ответу на этот вопрос:
Почему не включить защитников в С++ по умолчанию?
T.C. говорится:
Там "header" и есть "исходный файл". "заголовок" не должен быть фактических файлов.
Что это значит?
Просматривая стандарт, я вижу множество ссылок на "заголовочные файлы" и "заголовки". Однако в отношении #include
я заметил, что стандарт, похоже, ссылается на "заголовки" и "исходные файлы". (С++ 11, § 16.2)
A preprocessing directive of the form
# include < h-char-sequence> new-line
searches a sequence of implementation-defined places for a header identified uniquely
by the specified sequence between the < and > delimiters, and causes the replacement
of that directive by the entire contents of the header. How the places are specified
or the header identified is implementation-defined.
и
A preprocessing directive of the form
# include " q-char-sequence" new-line
causes the replacement of that directive by the entire contents of the source *file*
identified by the specified sequence between the " delimiters. The named source *file*
is searched for in an implementation-defined manner.
Я не знаю, насколько это важно. Может быть, что "заголовки" в контексте С++ однозначно означают "файлы заголовков", но слово "источники" было бы двусмысленным, поэтому "заголовки" являются сокращением, но "источники" - нет. Или может быть, что компилятор С++ разрешен для использования в скобках и должен действовать только так, как если бы имела место текстовая замена.
Итак, когда заголовки (файлы) не являются файлами?
Сноска, упомянутая T.C. в комментариях ниже достаточно прямо:
174) Заголовок не обязательно является исходным файлом, равно как и последовательности ограниченный < и > в именах заголовков обязательно действительный исходный файл имена (16.2).