Вихідні тексти як правило (але це залежить від коду, та й від мови) займають місця більше, ніж об'єктні. І для перетворення їх в об'єктний код (трансляцію) потрібен час. Тому давним-давно (ймовірно ще в 50-ті роки) і придумали роздільну трансляцію. Зберігаються на носії об'єктні модулі (і / або бібліотеки) які треба тільки підключити до вашій програмі на стадії складання (лінковки). Хоча час від часу випливають якісь системи спец. призначення (напр. для роботи студентів), де об. файли відсутні (скажімо швидкість трансляції висока а бібліотек мало). Але це рідкість. - alexlz 24 Січня '12 о 11:03
Я основним питанням ясно, і можна я задам питання не по темі, ви сказали що якщо написати функції в заголовки то вона буде зовнішня і доступна для всіх модулів, тобто в проекті може бути більше одного модуля якщо так, то де це використовується і як ці модулі між собою взаємодіють, і дайте посилання де можна детально про програми скомпільовані більш ніж з одного модуля. - username76 24 Січня '12 о 11:34
Потрібно для упорядкування великих програм, щоб не пхати все в один величезний файл, в якому хрін що знайдеш, а розбити на кілька модулів, де функції або класи об'єднуються, як правило, за тематикою (хоча це, звичайно, не обов'язково). Взаємодіють один з одним за допомогою зовнішніх функцій і змінних, які в інших файлах оголошуються за допомогою тих же хедерів. До того ж, якщо в програмі багато модулів, програма велика, то загальна компіляція може зайняти багато часу. Якщо вносите зміни в одну фунцкію, то не потрібно перекомпілювати все, досить один модуль. - skegg 24 Січня '12 о 11:40
@ Username76, коли тут говорилося про модулях, то малися на увазі одиниці компіляції (вихідні і одержувані з них об'єктні (* .o) файли) з яких компоновщик (линкер) робить завантажувальний модуль (* .exe в Windows). Треба розрізняти (мабуть по контексту) про будь модулях йдеться. Зазвичай при виконанні модулі в сенсі одиниць компіляції будуть працювати в одному просторі пам'яті, тоді як завантажувальні модулі в різних (і невидимих один для одного. - avp 24 Січня '12 о 19:10
lib - це бінарний файл, в ньому знаходиться вже скомпільований код. Тому наприклад стандартні бібліотеки не компілюються заново кожен раз при компіляції якогось хелло-ворлд. h - текстовий файл, в ньому оголошені функції з lib, але самого коду функцій в них немає. Підключення файлу .h необхідно щоб компілятор знав як виглядають функції в .lib: які параметри вони приймають (і в якому порядку) і які значення повертають.
відповідь дан 24 Січня '12 о 11:10