Почему некоторые стандартные заголовки C начинаются с "std", а другие-нет?
Например, в новый стандарт C11 были добавлены stdalign.h
и threads.h
. Почему не stdthreads.h
или align.h
? Это делается для того, чтобы избежать коллизий с существующими библиотеками и системными заголовками?
1 ответ:
В разное время были различные причины для выбора имен.
<stdio.h>
использовалось в качестве названия задолго до того, как появился стандарт с; стандарт просто стандартизировал существующую практику. Заголовок<stddef.h>
был изобретением оригинального комитета (C89); его название было выбрано потому, что он не использовался. Аналогично с<stdlib.h>
. Название<inttypes.h>
-это существующая практика, но комитет нуждается в<stdint.h>
для обслуживания самостоятельных реализаций. Имя<stdarg.h>
было выбрано для параллельного эквивалент без прототипа<varargs.h>
. Имя<stdbool.h>
не было в употреблении; так же, я думаю,<stdatomic.h>
,<stdalign.h>
,<stdnoreturn.h>
. Префиксstd
в основном зарезервирован для стандарта (но я использую заголовок"stderr.h"
, зная, что могу наступить на тонкий лед). Что касается того, почему<uchar.h>
и<threads.h>
не заканчивались префиксомstd
, я бы предположил, что некоторые предшествующие техники были существенно неизменными. AFAIK, обоснование C2011 еще не завершено; оно может раскрыть больше информации, когда оно будет доступно.