Українська
Підсумки
Висновки
Поділ на файли та бібліотеки допомагає зробити межі відповідальності явними. Заголовок описує інтерфейс для текстового включення; модуль надає керований експорт і залежності імпорту. Обидва підходи потребують коректного компонування й узгоджених параметрів. Автоматизований опис збирання та тести роблять проєкт відтворюваним, а перевірка конкретних можливостей дозволяє використовувати сучасний C++ без припущення про повну підтримку стандарту.
Питання для самоперевірки
- Чим оголошення відрізняється від визначення?
- Що саме захищає include guard і чого він не гарантує?
- Чому
externу заголовку та визначення в.cppутворюють один об’єкт? - Чому
staticу заголовку може змінити поведінку спільного лічильника? - Яка мовна роль
inline, окрім історичного зв’язку з оптимізацією? - Чому не варто відкривати весь простір
stdу публічному заголовку? - Які артефакти потрібні для використання статичної бібліотеки?
- Чим експорт модуля відрізняється від експорту Windows DLL?
- Які ролі виконують
.ixx,.ifcта.obj? - Для чого потрібний глобальний фрагмент
module;? - Чим
import :partвідрізняється відexport import :part? - Чому порядок компіляції модулів залежить від графа імпортів?
- Чому
import stdне замінює заголовок із потрібними макросами? - Чим відрізняються configure, build і test у CMake?
- Чому наявність старого макросу
executionне доводить підтримки C++26?
Контрольні питання до лабораторної роботи
- Які файли потрібні компілятору клієнта та які потрібні компонувальнику?
- Чому include guard не усуває порушення ODR між різними
.cpp? - Чим різняться зовнішня змінна, внутрішній стан файла й
inline-змінна? - Чому
exportмодуля не є експортом Windows DLL? - Які ролі мають первинний інтерфейс, розділ і одиниця реалізації модуля?
- Для чого розрізняють імена об’єктних файлів інтерфейсу й реалізації?
- Чому один готовий IFC не можна довільно переносити між наборами засобів?
- Як CMake визначає порядок компіляції клієнта і модуля?
- Чому обов’язкові тести не повинні залежати лише від
assert? - Яка перевірка доводить доступність потрібної можливості C++26 у вашому проєкті?
Корисні посилання
- Одиниці трансляції та зв’язування: https://learn.microsoft.com/cpp/cpp/program-and-linkage-cpp.
- Іменовані модулі: https://learn.microsoft.com/cpp/cpp/tutorial-named-modules-cpp.
- Модуль стандартної бібліотеки: https://learn.microsoft.com/cpp/cpp/tutorial-import-stl-named-module.
- Модулі у CMake: https://cmake.org/cmake/help/latest/manual/cmake-cxxmodules.7.html.
- Стан підтримки MSVC: https://learn.microsoft.com/cpp/overview/visual-cpp-language-conformance.