Каково различие между .cpp файлом и.h файлом?

В дополнение к ответу jlengrands, npm start запустит owc-dev-server, который выполняет минимальный объем работы; это разрешит только голые модули.

Библиотека QR-кодов, которую вы пытаетесь использовать, использует commonjs, для ее преобразования потребуется немного магии, чтобы браузер мог понять этот код. Webpack-dev-server может сделать это за вас, который вы можете запустить с помощью npm run start:dev.

57
задан Kent Fredric 18 May 2009 в 16:56
поделиться

8 ответов

Система сборки C ++ (компилятор) не знает разницы, поэтому все это одно из соглашений.

Соглашение состоит в том, что файлы .h являются объявлениями, а файлы .cpp - определениями.

Вот почему файлы .h включены #included - мы включаем объявления.

54
ответ дан 24 November 2019 в 19:32
поделиться

Файл .cpp является единицей компиляции: это реальный файл исходного кода, который будет скомпилирован (в C ++).

Файлы .h (заголовочные) - это файлы, которые будут виртуально копироваться / вставляться в .cpp файлы, в которых появляется инструкция прекомпилятора #include. Как только код заголовков вставлен в код .cpp, можно начинать компиляцию .cpp.

24
ответ дан 24 November 2019 в 19:32
поделиться

Я знаю разницу между объявлением и определением.

Принимая во внимание:

  • Файл CPP включает определения из любого заголовка, который он включает (потому что CPP и файл заголовка вместе становятся одна "единица перевода")
  • Заголовочный файл может быть включен более чем одним файлом CPP
  • Компоновщику обычно не нравится что-либо определенное в более чем одном файле CPP

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

Определения, которые не являются ни статическими, ни встроенными, помещаются в файлы CPP. Кроме того, любые объявления, которые необходимы только в одном файле CPP, часто помещаются внутри самого файла CPP, а не в любой (совместно используемый) файл заголовка.

12
ответ дан 24 November 2019 в 19:32
поделиться

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

Причина, по которой они разделены, заключается в том, что файлы .h не компилируются в двоичный код, а файлы .cpp. Возьмем, к примеру, библиотеку. Скажем, вы являетесь автором и не хотите, чтобы исходный код был открытым. Таким образом, вы распространяете скомпилированную двоичную библиотеку и файлы заголовков своим клиентам. Это позволяет им легко видеть всю информацию о классах вашей библиотеки, которые они могут использовать, не имея возможности видеть, как вы реализовали эти методы. Они больше предназначены для людей, использующих ваш код, а не для компилятора. Как было сказано ранее: это условность.

Они больше предназначены для людей, использующих ваш код, а не для компилятора. Как было сказано ранее: это условность.

Они больше предназначены для людей, использующих ваш код, а не для компилятора. Как было сказано ранее: это условность.

7
ответ дан 24 November 2019 в 19:32
поделиться

Файл заголовка ( .h , .hpp , ...) содержит

  • определений классов ( класс X {.. .}; )
  • Определения встроенных функций ( inline int get_cpus () {...} )
  • Объявления функций ( void help (); )
  • Объявления объектов ( extern int debug_enabled; )

Исходный файл ( .c , .cpp , . cxx ) содержит

  • определений функций ( void help () {...} или void X :: f () {...} )
  • Определения объектов ( int debug_enabled = 1; )

Однако соглашение, согласно которому заголовки именуются суффиксом .h , а исходным файлам присваивается имя .cpp суффикс действительно не требуется. Хороший компилятор всегда может сказать, как обращаться с каким-либо файлом, независимо от его суффикса имени файла ( -x для gcc. Подобно -x c ++ ).

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

8
ответ дан 24 November 2019 в 19:32
поделиться

Другие уже предлагали хорошие объяснения, но я подумал, что должен уточнить различия между различными расширениями:

  Source Files for C: .c
  Header Files for C: .h

  Source Files for C++: .cpp
  Header Files for C++: .hpp

Конечно, как уже отмечалось, это всего лишь соглашения. На самом деле компилятор не обращает на них никакого внимания - это исключительно в интересах кодировщика.

2
ответ дан 24 November 2019 в 19:32
поделиться

Хорошее практическое правило: «.h файлы должны иметь объявления [потенциально], используемые несколькими исходными файлами , но никакого кода, который запускается. "

2
ответ дан 24 November 2019 в 19:32
поделиться

По соглашению, файлы .h включаются в другие файлы и никогда не компилируются сами по себе. Файлы .cpp - опять же по соглашению - являются корнями процесса компиляции; они прямо или косвенно включают файлы .h, но обычно не включают файлы .cpp.

1
ответ дан 24 November 2019 в 19:32
поделиться
Другие вопросы по тегам:

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