В конце концов, это стандарт - он не должен переходить от одной версии GCC к другой.
Нет, это не стандарт. Стандарт заключается в том, что вы можете написать
#includeв единице перевода, и это повлияет на определенные вещи. Нет никакой гарантии из языковых стандартов , что заголовки являются файлами, не говоря уже о том, что они являются файлами в определенном каталоге в файловой системе на вашем компьютере с фиксированным содержимым.
Вся суть таких стандартных заголовков состоит в том, что они делают все, что подходит компилятору C / C ++, чтобы обеспечить то, что, согласно языковым стандартам, они должны обеспечивать после их включения. Они предоставляют необходимые объявления и макросы (обычно) с использованием внутренних ключевых слов, прагм, макросов и встроенных функций, предоставляемых компилятором. Конечно, это варьируется от компилятора к компилятору.
Это вторая ошибка, которую вы здесь делаете. Было бы близорукой ошибкой думать, что GCC - единственный компилятор C / C ++.Люди со старым опытом программирования DOS или Win32, где могло быть много компиляторов, будут очень знакомы с идеей, что стандартные заголовки очень сильно привязаны к компилятору . Нельзя просто взять стандартные заголовки (скажем) из Watcom C / C ++ и использовать их с компиляторами Borland, Microsoft, IBM или любыми другими компиляторами C / C ++.
Это мышление, которое следует принять, потому что это верно и для вас . Хотя то, что необходимо сделать в стандартном заголовке для достижения его цели, потенциально может варьироваться от одной версии GCC к другой, они также могут варьироваться между (скажем) clang и GCC. Операционные системы Unix и Linux не монокультуры с одним компилятором.
И действительно, вы найдете
float.h
,limits.h
,stdint.h
,stddef.h
,stdarg.h
и несколько других таких стандартных заголовков находятся в этих специфичных для компилятора местах.limits.h
- это особенно запутанное дело, потому что оно охватывает как знания, специфичные для компилятора, так и специфичные для целевой платформы.Дополнительная литература
- «4.1.2 Стандартные заголовки». Обоснование американского национального стандарта информационных систем - язык программирования - C .
- Бьярн Страуструп (2013). «Заголовки стандартной библиотеки». Язык программирования C ++ . 4-е издание. Эддисон-Уэсли. ISBN 9780133522853.
- Джонатан де Бойн Поллард (2012). Предопределенные макросы в C / C ++, которые сообщают вам, какие языковые функции доступны. .Часто задаваемые ответы.
Да вы прекрасно понимаете, как это работает. Я рад, что моя документация доносит суть. ^HU (Сопровождающий KVM)