Хорошо, до сегодняшнего утра я был совершенно смущен между этими условиями. Надеюсь, у меня есть разница, надеюсь.
Во-первых, путаница заключалась в том, что, поскольку препроцессор уже включает файлы заголовков в код, который содержит функции, какие функции библиотеки связывают линкер с объектным файлом, созданным ассемблером/компилятором? Часть путаницы в основном возникла из-за моего незнания о различии между файлом заголовка и библиотекой.
После небольшого поиска в googling и (это термин?: p), я понял, что заголовочный файл в основном содержит декларации функций, тогда как фактическая реализация находится в другом двоичном файле, называемом библиотекой (я все еще не на 100% уверены в этом).
Итак, предположим, что в следующей программе: -
#include<stdio.h>
int main()
{
printf("whatever");
return 0;
}
Препроцессор включает в себя содержимое файла заголовка в коде. Компилятор/компилятор + ассемблер выполняет свою работу, а затем, наконец, компоновщик объединяет этот объектный файл с другим объектным файлом, который фактически сохранил способ printf()
.
Правильно ли я в своем понимании? Я могу быть в отъезде... так что, пожалуйста, помогите мне?
Изменить: Я всегда задавался вопросом о С++ STL. Это всегда путало меня в том, что это такое, сборник всех этих заголовков или что? Теперь, прочитав ответы, могу ли я сказать, что STL - это объектный файл/что-то похожее на объектный файл?
А также я подумал, где можно прочитать определения функций таких функций, как pow()
, sqrt()
и т.д. Я бы открыл файлы заголовков и ничего не нашел. Итак, определение функции в библиотеке в двоичной нечитабельной форме?