С++ включает в себя и без .h
Возможный дубликат:
В чем разница между использованием # include <filename> и # include < filename.h > в С++
Я никогда не замечал, что это имеет значение, независимо от того, включаю ли я .h в конце include, поэтому я всегда игнорировал это значение, но я только что заметил в моей конкретной программе, я получить ошибку "memcpy не был объявлен в этой области", если я включаю "строку", но не, если я включаю "string.h".
Прежде всего, я задавался вопросом о конкретной причине этого, но также, как правило, о различии между ними. В то же время, если кто-то может объяснить разницу между включениями в скобки angular и те, что указаны в кавычках, было бы очень полезно.
Ответы
Ответ 1
<string>
- это заголовочный файл стандартной библиотеки С++, содержащий std::string
и его друзей. <string.h>
- это другой заголовок из стандартной библиотеки C, который имеет функции для управления строками C (строки с нулевым завершением) и другими связанными функциями.
Оба они совершенно разные и не связаны друг с другом. В С++ (как в C) заголовочный файл может иметь любое расширение. Заголовки стандартной библиотеки С++ не имеют расширения; У стандартных заголовков библиотек C есть расширение .h
. .hpp
или .hxx
также являются общими.
Ответ 2
Я просто добавлю, что в С++ есть C заголовки, доступные в традиционной форме C, например string.h
, и они используются как #include <string.h>
, но есть также их копии с именами, начинающимися с буквы "c" и без расширения - например, cstring
. Эти заголовки используются как заголовки С++ #include <cstring>
, а имена из этих заголовков находятся в пространстве имен std
.
Ответ 3
Это два разных файла и не имеют ничего общего друг с другом.
#include <string>
относится к строкам STL стандартной библиотеки С++
#include <string.h>
определяет несколько функций для управления строками и массивами C.
Для включения не предполагается расширение.
В некоторых заголовочных файлах к ним не добавлено .h. Вы обычно видите это с заголовочными файлами, содержащими шаблоны.
Ответ 4
Относительно разницы между использованием angular скобок и кавычек, я думаю, что это имеет какое-то отношение к порядку, в котором ищутся файлы заголовков: если это между кавычками, компилятор сначала проверит рабочий каталог ( не очень полезны в случае заголовков системы, поскольку они не находятся в том же каталоге, что и компилятор), прежде чем проверять каталог системных заголовков.
Ответ 5
О различии между включенными в скобках angular и комментариями в кавычках, первый инструктирует препроцессор для поиска включенных файлов сначала по пути, указанному опцией компилятора /I. Второй сообщает препроцессору искать файлы include в том же каталоге файла, который содержит оператор #include.