Когда вы включаете заголовочный файл (.h, .hpp, .hh, .hxx extensions) из C стандартной библиотеки или C++ STL (или даже включаете большой файл Microsoft, такой как windows.h
) и используете только определенное ограниченное число функций из него, весь файл становится двоичным и копируется в исполняемый файл, или только определенные, соответствующие функции, которые используются, становятся бинарными?Как файл заголовка компилируется в исполняемый файл?
Если весь файл копируется (и это то, что я думаю, на самом деле происходит, поскольку windows.h
имеет макроопределения для уменьшения избыточности, например, WIN32_LEAN_AND_MEAN
) - почему так происходит? Почему команда препроцессора #include
не копирует только используемые функции (и другие функции, которые используются этими функциями в фоновом режиме)? Разве это не экономически выгодно?
Если копируются только соответствующие функции - почему мы должны делать заголовок - включает в первую очередь? Почему бы нам не использовать только огромный набор функций, которые были бы использованы и скомпилированы при необходимости, например, ситуация в интерпретируемых языках, таких как PHP (и некоторые случаи в Python). Если это только потому, что «C и C++ старше и стандартизированы», почему бы не сделать это в своих новых версиях? или, по крайней мере, современные компиляторы, позволяющие это (мы уже видели случаи, когда компиляторы изгибают язык старения в пользу современного разработчика)?
Итак, почему мы должны делать заголовок, включающий ** для стандартных библиотек **, в первую очередь? Почему это не пул стандартных функций (например, PHP)? Только из-за соображений компиляции? – Reflection
Когда-то компиляторы были очень медленными. Кроме того, в C стандартная библиотека не отличается от любой пользовательской библиотеки. Файлы заголовков в основном присутствуют, чтобы сообщить компилятору, какие типы функций и переменные. Стандартная библиотека не имеет специального статуса – user1338