Ответ 1
Стандарт C делает разницу между заголовками и исходными файлами, на которые ссылаются директивы #include
для предварительной обработки:
6.10.2 Включение исходного файла
Ограничения
1 Директива A
#include
должна идентифицировать заголовок или исходный файл, который может быть обработан реализацией.Семантика
2 Директива предварительной обработки формы
# include <h-char-sequence> new-line
выполняет поиск последовательности определённых реализацией мест для заголовка, идентифицированного однозначно посредством указанной последовательности между < и > delimiters, и вызывает замену этой директивы на все содержимое заголовка. Как указаны места или идентифицированный заголовок определяется реализацией.
3 Директива предварительной обработки формы
# include "q-char-sequence" new-line
вызывает замену этой директивы всем содержимым исходного файла, идентифицированного указанной последовательностью между "разделителями". Именованный исходный файл выполняется поисковым способом. Если этот поиск не поддерживается или если поиск не выполняется, директива перерабатывается, как если бы она читала
# include <h-char-sequence> new-line
с идентичной содержащейся последовательностью (включая > символы, если они есть) из исходной директивы.
Компилятор может реализовать схему, в которой стандартные заголовки фактически не хранятся как файлы в файловой системе. Но директива #include "filename.h"
определяется как поиск сначала для файла в системном режиме, а затем поиск стандартных заголовков, как если бы директива была #include <filename.h>
Обратите внимание, что расширения файлов .c
и .h
являются чисто конвенцией для различения файлов, содержащих декларации и файлы, содержащие фактические определения кода и данных. Ничто в Стандарте не делает это соглашение обязательным, помимо имен, используемых для стандартных заголовков. Некоторые люди используют другие соглашения с разными расширениями или вообще не имеют никаких расширений для конкретных потребностей, но подавляющее большинство программистов C рассматривают это как плохую практику.
Шафик Ягмур предоставил цитату из Обоснования C99 в ответ на аналогичный вопрос, который наводит на мысль о намерениях комитетов по этому вопросу: fooobar.com/questions/451728/...