Другие языки программирования и технологии

Почему в C++ заголовки функций и код принято хранить в отдельных файлах?

потому что компилятор обрабатывает cpp файлы независимо друг от друга
Пример:
файл a.h, содержит ОБЪЯВЛЕНИЕ void a(int);
файл a.cpp, содержит ОПРЕДЕЛЕНИЕ void a(int) { ...}, а также включает a.h: #include "a.h"
файл main.cpp, содержит какие-то методы, которые вызывают a(...), и тоже инклудит a.h

При компиляции будет происходить следующее:
1) Компилятор обработает файл a.cpp, подключит a.h (из-за include) и создаст a.obj (в нем будет скомилированный void a(int))
2) Компилятор обработает файл main.cpp, подключит a.h, и, поскольку на этом шаге он не найдет нигде определение функции void a(int), на места вызовов он положит некие заглушки. Результатом будет main.obj
3) Линкер начнет соединять a.obj и main.obj. То есть искать все определения всех методов и разрешать эти самые заглушки. Если какой-то из методов не будет найдет - будут странные сообщения об ошибках. Если все хорошо, то создаст исполняемый модуль или библиотеку (exe/dll/so/lib/wtf)

Почему так все сделано - ну исторически так сложилось. И компилировать быстрее - при изменении одного cpp файла достаточно перекомпилировать только его (в obj) ну и пересобрать, что в любом случаее быстрее полной перекомпиляции всех файлов
Саня )
Саня )
3 721
Лучший ответ
Потому что когда-то давным-давно в одной далекой галактике компьютеры были большими, но медленными. И чтобы компилятор не перелопачивал весь код от и до, придумали хранить заголовки отдельно.
Потому что заголовок целиком копируется в файл, куда он подключается.
by design
иного объяснения нет
Антон Поляков
Антон Поляков
2 428