Различие между использованием #include <имя файла> и #include <filename.h> в C++

27
задан Wolf 11 December 2017 в 16:38
поделиться

5 ответов

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++).

Теперь те были различием.

, Почему Вы использовали бы 'filename.h'?

  • Совместимость с компиляторами C
  • Совместимость с очень старыми компиляторами C++

, Почему необходимо использовать 'cfilename'?

  • Имена в пространстве имен std::. Никакие столкновения имени больше.
  • Новые функции C++ (например, перегруженные математические функции для плавания, долго)
  • Заголовки Совместимости C (filename.h) могли исчезнуть в будущем.
33
ответ дан Johannes Schaub - litb 28 November 2019 в 04:53
поделиться

Эти #include <foo.h> было распространено в коде C++ до стандарта C++. Стандарт изменил его на #include <foo> со всем от заголовка, помещенного в std пространство имен. (Благодаря litb для указания, что стандарт никогда не позволял.h заголовки.)

нет никакого волшебного продолжения, первое ищет файл, названный 'foo.h' и вторым для файла, названного 'нечто'. Они - два различных файла в файловой системе. Стандарт просто изменил имя файла, который должен быть включен.

В большинстве компиляторов старые заголовки все еще там для назад совместимости (и совместимость с C), но современные программы C++, которые хотят следовать стандарту, не должны использовать их.

В случае стандарта C заголовки, версии C++ имеют c вначале, таким образом, заголовок C

#include <stdio.h>

становится

#include <cstdio>
19
ответ дан CAdaker 28 November 2019 в 04:53
поделиться

Старый стандарт использовал #include <filename.h> синтаксис. Когда пространства имен и шаблоны были добавлены к языку, стандарт был изменен на #include <filename>.

Это было сделано так, чтобы стандартный материал библиотеки мог все быть помещен в пространство имен станд. Более старый код, который не имел никакого понятия пространств имен, будет все еще работать, начиная с эти #include <filename.h> файлы не используют пространства имен.

Новый код должен всегда , используют эти #include <filename> формат. При использовании более старого формата все символы, которые они определяют, будут помещены в глобальное пространство имен, а не станд.

4
ответ дан Ferruccio 28 November 2019 в 04:53
поделиться

Те без.h - заголовочные файлы C++, в то время как те с.h - заголовочные файлы C. Это только относится к стандартным заголовочным файлам в C++.

, Если Вы включаете свои собственные файлы или файлы, который не является частью стандартного C++, который необходимо всегда писать полному имени файла (который может быть чем-либо).

0
ответ дан Magnus Westin 28 November 2019 в 04:53
поделиться

Если Вы говорите о стандартных библиотеках (потому что иначе это работа привычки вообще), различие

#include< header >
//my code

, корректный способ назвать заголовок соответственно стандарт C++, в то время как

#include< header.h >
//my code

удерживается от использования (в стандарте C++, но все еще необходимый согласно стандарту C99) и пришел с остальной частью багажа C.

, Таким образом, необходимо использовать:

#include< cmath >
//my code

нет:

#include< math.h >
//my code
2
ответ дан Robert Gould 28 November 2019 в 04:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: