2015-04-18 2 views
1

Я только что изучил C++ - и я решил один проект, над которым я работаю, мне лучше вернуться на чертежную доску и записать ее с нуля на C++, а не тащить on with C.Создание файлов заголовков библиотек в C++? (В отличие от старого Fashined C?)

Есть только одна проблема - часть этого проекта включает библиотеки. Некоторые библиотеки не нужны в C++, но некоторые будут.

Я заметил, что синтаксис для включения библиотеки заголовков отличаются в C++, чем в С. В С вы пишете следующее:

#include <someheader.h> 

С другой стороны, в C++, что вы печатаете следующее (если это C библиотека ++):

#include <someheader> 

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

У кого-нибудь есть какая-либо информация, что мне нужно знать при сборке файла заголовка библиотеки C++, в отличие от одного для C?

+0

вещь внутри не имеет никакого отношения к языку. Его имя содержит файл. '#include ' как действительный C, так как это C++ – Creris

+0

@Creris, может быть, не в равной степени действителен, хотя, поскольку 'stdio.h' устарел на C++. – chris

+1

Для стандартных заголовков предпочитайте '' альтернативы ''. Для любой другой библиотеки вы не можете просто решить, что использовать: вы должны соответствовать имени файла. – stefan

ответ

6

Нет никакой разницы. Большинство, если не все, стандартных файлов библиотеки C++ включают файлы, не имеющие расширения .h, чтобы отличать их от библиотеки C. Исходные стандартные имена файлов заголовков C устаревают в C++, хотя практически каждый компилятор все еще поддерживает их и изменен в имени на c, за которым следует исходное имя файла C, без расширения .h.

Например: В C заголовочный файл, относящийся к строкам, - string.h, но заголовочный файл C++, относящийся к строкам, - string. Исходный файл заголовка C также можно получить на C++ как cstring.

+0

Также стоит отметить, что заголовок 'string.h' устарел на C++. Вместо этого вы должны использовать 'cstring' (то же самое с большинством, если не всеми стандартными заголовками C). Это также решает «двусмысленность» между 'string' и' string.h', поскольку 'cstring' четко заявляет, что вы включаете стандартный заголовок C. – dasdave

+0

@MartinD. Хорошая точка зрения; Я расскажу об этом. –

+0

Другими словами, если я понимаю, вы говорите, что мне просто нужно назвать файл «someheader», а не «someheader.h», и это единственное различие.Большое вам спасибо. Я просто хотел быть уверенным, что это было просто, а не приветствовалось неожиданностью. –

0

Не стесняйтесь смешивать стандартные заголовки C со стандартными заголовками C++. Но будьте последовательны. Для проекта C++ используйте <cstdlib>, для C используйте <stdlib.h>, потому что заголовки C++ используют пространства имен, и вы можете избежать коллизий имен. Все стандартные заголовки C дублируются на C++, поэтому вы можете свободно использовать C-библиотеку в коде C++.

Если вы посмотрите на <cstdlib>, вы увидите, что он включает в себя <stdlib.h>. Это справедливо для других стандартных заголовков C.

+0

Я имею в виду стандартные заголовки. Ты не понял меня. Я починю это. – gomons

+0

Я исправил неоднозначность – gomons

+0

Хорошо, теперь немного больше смысла. –