20 Library introduction [library]

20.5 Library-wide requirements [requirements]

20.5.2 Using the library [using]

20.5.2.1 Overview [using.overview]

В этом разделе описывается, как программа на C ++ получает доступ к средствам стандартной библиотеки C ++. [using.headers] описывает эффекты во время фазы трансляции 4, а [using.linkage] описывает эффекты во время phase 8.

20.5.2.2 Headers [using.headers]

Сущности в стандартной библиотеке C ++ определены в заголовках, содержимое которых становится доступным для единицы перевода, когда она содержит соответствующие #include preprocessing directive.

Единица перевода может включать заголовки библиотеки в любом порядке (пункт [lex]). Каждый из них может быть включен более одного раза, при этом эффект не отличается от включения только один раз, за ​​исключением того, что эффект от включения одного<cassert> или другого <assert.h> зависит каждый раз от лексически актуального определения слова .NDEBUG173

Единица трансляции должна включать заголовок только вне любого объявления или определения и должна включать заголовок лексически перед первой ссылкой в ​​этой единице трансляции на любой из объектов, объявленных в этом заголовке. Диагностика не требуется.

Это то же самое, что и стандартная библиотека C.

20.5.2.3 Linkage [using.linkage]

Сущности в стандартной библиотеке C ++ имеют external linkage. Если не указано иное, объекты и функции имеют значение по умолчанию extern "C++" linkage ([dcl.link]).

Если имя из стандартной библиотеки C объявлена с внешним связыванием имеет или рычажный механизм реализации. Рекомендуется, чтобы реализация использовала для этой цели связь.extern "C"extern "C++"extern "C++"174

Объекты и функции, определенные в библиотеке и требуемые программой C ++, включаются в программу до ее запуска.

Единственный надежный способ объявить объект или сигнатуру функции из стандартной библиотеки C - это включить декларирующий ее заголовок, несмотря на широту, предоставленную в 7.1.4 стандарта C.