при работе с C ++ я предпочитаю использовать синтаксис заголовка C ++, если нет причин не делать этого. Также представляется более безопасным использовать <name>
(без синтаксиса .h
) на основе следующих комментариев в стандарте:
Раздел 17.4.1.2, пункты 3 и 4 (ИСО / МЭК 14882, второе издание 2003-10-15):
Средства стандартной библиотеки C представлены в 18 дополнительных заголовках, как показано в таблице 12:
Затем списки со стола, например, <cassert>
, <ciso646>
, ... и затем продолжает
За исключением случаев, указанных в пунктах 18–27, содержимое каждого заголовка cname должно быть таким же, как и содержимое соответствующего заголовка name .h ....
Таким образом, стандарт определяет заголовки без .h
, но указывает, что по большей части они идентичны тем, которые предоставляются компилятором C, и предоставляет пункты 18-27 для определения различий.
К сожалению, я не могу понять, где находятся эти разделы в стандарте, чтобы можно было документировать различия, если они будут полезны.
Я не верю, что существует требование наличия заголовков .h
при использовании компилятора C ++.
Как отметил @James в комментарии, в разделе D.5, параграфы 1 и 2 говорится, что заголовки C должны присутствовать:
... Стандартная библиотека C ++ предоставляет 18 заголовков C ....
Каждый заголовок C, каждый из которых имеет имя вида name .h, ведет себя так, как будто каждое имя, помещенное в пространство имен стандартной библиотеки соответствующим заголовком cname , также помещается в пределах пространства имен пространства имен std
, за которым следует явное объявление использования (7.3.3)