Только для C ++ include-файлы, не найденные в стандарте 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 ++).
Теперь это была разница.
Зачем вам использовать `filename.h`?
- Совместимость с компиляторами C
- Совместимость с очень старыми компиляторами C ++
Почему вы должны использовать `cfilename`?
- Имена находятся в пространстве имен
std::
. Больше нет имен
- Новые функции C ++ (например, перегруженные математические функции для float, long)
- C заголовки совместимости (
filename.h
) могут исчезнуть в будущем.