C++ только включать-файлы, не найденные в стандарте C никогда, не использовал filename.h
. Так как самый первый Стандарт C++ вышел (1998), они использовали filename
для их собственных заголовков.
Файлы, наследованные Стандартом C, стали cfilename
вместо filename.h
. Файлы C, наследованные используемый как filename.h
, удерживаются от использования, но все еще часть стандарта C++.
различие - то, что имена, не определенные как макросы в C, найдены в пространстве имен std::
в cfilename
в C++, в то время как имена в filename.h
в объеме глобального пространства имен. Таким образом, Вы найдете ::size_t
в stddef.h, и std::size_t
в cstddef. Оба - Стандартный C++, но использование:: size_t удерживается от использования (См. Приложение D Стандарта C++).
Теперь те были различием.
std::
. Никакие столкновения имени больше. filename.h
) могли исчезнуть в будущем. Эти #include <foo.h>
было распространено в коде C++ до стандарта C++. Стандарт изменил его на #include <foo>
со всем от заголовка, помещенного в std
пространство имен. (Благодаря litb для указания, что стандарт никогда не позволял.h заголовки.)
нет никакого волшебного продолжения, первое ищет файл, названный 'foo.h' и вторым для файла, названного 'нечто'. Они - два различных файла в файловой системе. Стандарт просто изменил имя файла, который должен быть включен.
В большинстве компиляторов старые заголовки все еще там для назад совместимости (и совместимость с C), но современные программы C++, которые хотят следовать стандарту, не должны использовать их.
В случае стандарта C заголовки, версии C++ имеют c вначале, таким образом, заголовок C
#include <stdio.h>
становится
#include <cstdio>
Старый стандарт использовал #include <filename.h>
синтаксис. Когда пространства имен и шаблоны были добавлены к языку, стандарт был изменен на #include <filename>
.
Это было сделано так, чтобы стандартный материал библиотеки мог все быть помещен в пространство имен станд. Более старый код, который не имел никакого понятия пространств имен, будет все еще работать, начиная с эти #include <filename.h>
файлы не используют пространства имен.
Новый код должен всегда , используют эти #include <filename>
формат. При использовании более старого формата все символы, которые они определяют, будут помещены в глобальное пространство имен, а не станд.
Те без.h - заголовочные файлы C++, в то время как те с.h - заголовочные файлы C. Это только относится к стандартным заголовочным файлам в C++.
, Если Вы включаете свои собственные файлы или файлы, который не является частью стандартного C++, который необходимо всегда писать полному имени файла (который может быть чем-либо).
Если Вы говорите о стандартных библиотеках (потому что иначе это работа привычки вообще), различие
#include< header >
//my code
, корректный способ назвать заголовок соответственно стандарт C++, в то время как
#include< header.h >
//my code
удерживается от использования (в стандарте C++, но все еще необходимый согласно стандарту C99) и пришел с остальной частью багажа C.
, Таким образом, необходимо использовать:
#include< cmath >
//my code
нет:
#include< math.h >
//my code