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