Например, в новом стандарте C11 добавлены stdalign.h
и threads.h
. Почему бы не stdthreads.h
или align.h
? Следует ли избегать столкновений с существующими библиотеками и заголовками систем?
Почему некоторые стандартные заголовки C начинаются с "std", а другие нет?
Ответ 1
В разное время были разные причины для выбранных имен. <stdio.h>
использовался как имя задолго до того, как появился стандарт C; стандартная просто стандартизованная существующая практика. Заголовок <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 еще не завершено; он может отображать больше информации, когда она доступна.