Почему не всем стандартным заголовкам предшествует префикс std?
Почему не всем стандартным заголовкам предшествует
std
префикс? Т.е. почему
complex.h
и нет
stdcomplex.h
?
2 ответа
Почему? почему нет? Кто знает? Заголовочные файлы, из которых состоят стандартные библиотеки, начали развиваться в эту категорию еще до того, как появился стандарт, в течение многих лет после внесения изменений разработчиками и тщательного изучения членами комитета C. Многие из первоначальных авторов и членов комитета, которые разработали и канонизировали эти файлы, теперь являются частью большого компилятора в небе и не могут ответить на вопрос «почему» стандартное соглашение об именах на самом деле не является общепринятым или стандартным. Но чтение этой вики-страницы по теме может, по крайней мере, позволить вам получить немного истории и контекста.
Именование исторически не имело ничего общего с формальной стандартизацией ISO, и я не думаю, что когда-либо существовало стремление отбросить
std
впереди все стандартная библиотека.
Самым ранним упоминанием о стандартной библиотеке является K&R The C programming Language 1st edition от 1978 года, где ниже в главе 8.5 мы можем прочитать:
Структура данных, описывающая файл, содержится в файле
stdio.h
, который должен быть включен (#include
) в любом исходном файле, который использует подпрограммы из стандартной библиотеки.
Примечательно, что K&R называет ее стандартной библиотекой , а не стандартной библиотекой ввода / вывода. Так что, возможно (и это предположение), этот заголовок изначально предназначался для всей стандартной библиотеки для C. Это единственный из заголовков текущей стандартной библиотеки ISO, упомянутый в книге, и он предшествует формальной стандартизации более чем десять лет.
Позже, во время стандартизации ANSI/ISO, заголовки
stdarg
,
stddef
,
stdio
и
stdlib
были добавлены к первому стандарту, но это всего лишь 4 из 15 стандартных заголовков с префиксом std. Различные де-факто стандартные заголовки C или Unix были добавлены к стандарту в значительной степени произвольно. Для чего-либо не было разумного обоснования, в особенности API или именования. Они просто добавили различные уже существующие библиотеки Unix в стандарт.
Примечательно, что исходный стандарт C гарантировал только 6 уникальных букв для стандартных заголовков, а все исходные заголовки имеют имена из 6 или менее букв. Это было расширено до 8 букв в C99.
C99 продолжил традицию произвольного именования, добавив целую кучу новых заголовков, из которых только
stdint
и
stdbool
имеют префикс std. То, что C11 назвал большинство новых заголовков с префиксом std, может быть некоторым влиянием C++, но, в частности, C11 также добавлен
uchar.h
без префикса.