Почему не всем стандартным заголовкам предшествует префикс 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 без префикса.

Другие вопросы по тегам