Включая заголовочные файлы, когда нет файла реализации? - PullRequest
1 голос
/ 13 марта 2012

Я искал исходный код для ncmpcpp и увидел это.

#include <mpd/client.h>

Внутри этого файла находятся функции, которые используются ncmpcpp. Но это только заголовки. Разве файлы cpp не должны где-то существовать? Я не мог найти их в одном каталоге. Где они?

Кроме того, когда что-то, что включено, окружено <и>, как мне узнать, где искать?

Ответы [ 2 ]

4 голосов
/ 13 марта 2012

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

Если у вас нет template s, которые могут быть встроенными.

Вам нужны только файлы cpp или, в более общем смысле, файлы реализации, если вы хотите скомпилировать код самостоятельно.Что вы не делаете.Вы можете использовать модуль, имеющий только заголовки и двоичные файлы.

Конечно, приходит на ум пример проектов с открытым исходным кодом, где все файлы обычно включены, но если это коммерческий продукт, зачем выпускать исходный код?Что мешает конкурентам просто скопировать его и перепродать под новым именем?

Не существует стандартного правила, которое указывает, где искать заголовки, ограниченные <> или "", но общее мнение состоит в том, что <> должны использоваться для системных заголовков (например, string).или iostream) и "" для собственных заголовков (myclass.h).Он просто сообщает компилятору, где искать в первую очередь.

2 голосов
/ 13 марта 2012

Исходные файлы не нужны, если есть библиотека (статическая или динамически связанная), с которой компилятор может ссылаться, обычно это файлы .a или .lib (хотя очень редко вам может понадобиться .def файл).

Для путей поиска см. это для MSVC и это для GCC.

...