Почему некоторые стандартные заголовки C начинаются с "std", а другие-нет?


Например, в новый стандарт C11 были добавлены stdalign.h и threads.h. Почему не stdthreads.h или align.h? Это делается для того, чтобы избежать коллизий с существующими библиотеками и системными заголовками?

1 19

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