Страницы

Поиск по вопросам

вторник, 11 июня 2019 г.

Воспользоваться функцией из другого cpp/h файла

Подскажите как объявить, и в последующем обратиться к функции в другом файле


Ответ

Во-первых, в .h-файлах нет никаких функций. Это просто кусок текста, вставляемый перед компиляцией вместо соответствующих директив #include. Соответственно, с точки зрения компилятора нет никакой разницы, включили ли вы заголовочный файл или просто взяли и скопировали его содержимое в свой .cpp руками.
То есть для решения вашей задачи нет разницы между заголовочным файлом с объявлением функции:
decl.h
#pragma once void foo(int bar); main.cpp
#include "decl.h" int main() { foo(21); // Использование функции } implementation.cpp
#include "decl.h" void foo(int bar) { // Реализация функции }
и повтором объявления в каждом .cpp-файле, которому нужна эта функция:
main.cpp
void foo(int bar); int main() { foo(21); // Использование функции } implementation.cpp
void foo(int bar) { // Реализация функции }
Во-вторых, .cpp-файл — это «вещь в себе», чёрный ящик с двоичными данными и списком того, что этот ящик импортирует/экспортирует, и по каким байтовым смещениям в вышеуказанных данных это требуется/реализуется соответственно:
Если в .cpp-файле производится обращение к чему-то, нереализованному в этом файле, и у компилятора есть объявление (то есть прототип для проверки корректности обращения), генерируется импорт этого чего-то по имени. Если в .cpp-файле объявляется не-static переменная либо функция (методы классов, кстати, тоже полноценные функции), генерируется экспорт.
И только потом, на этапе компоновки производится связывание соответствующих импортов и экспортов этих «чёрных ящиков» (а также подобных «ящиков», составляющих реализацию стандартной библиотеки).

Комментариев нет:

Отправить комментарий