С++ включает в себя и без .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.