sandbox/drawings/cpp/macro_1.puml
2025-09-16 11:37:02 +03:00

59 lines
2.1 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

@startuml
title Механизм работы STB_IMAGE_IMPLEMENTATION
!define COMPILATION_COLOR #LightBlue
!define PREPROCESSOR_COLOR #LightGreen
!define LINKER_COLOR #LightCoral
participant "Препроцессор" as PP <<PREPROCESSOR_COLOR>>
participant "Utility.cpp" as UTIL <<COMPILATION_COLOR>>
participant "Other.cpp" as OTHER <<COMPILATION_COLOR>>
participant "stb_image.h" as STB
participant "Линковщик" as LINK <<LINKER_COLOR>>
== Компиляция Utility.cpp ==
UTIL -> UTIL: #define STB_IMAGE_IMPLEMENTATION
UTIL -> PP: #include "stb_image.h"
PP -> STB: Открывает файл
STB -> PP: Строки 1-545:\nОбъявления функций\n(всегда включаются)
PP -> PP: Проверка:\n#ifdef STB_IMAGE_IMPLEMENTATION?\nДА!
STB -> PP: Строки 547-7800+:\nРеализация функций\n(включается!)
PP -> UTIL: Возвращает:\n- Объявления\n- Реализации
UTIL -> UTIL: Компиляция:\nОбъектный файл содержит\nкод функций stbi_load и др.
== Компиляция Other.cpp ==
OTHER -> PP: #include "stb_image.h"\n(БЕЗ define)
PP -> STB: Открывает файл
STB -> PP: Строки 1-545:\nОбъявления функций\n(всегда включаются)
PP -> PP: Проверка:\n#ifdef STB_IMAGE_IMPLEMENTATION?\nНЕТ!
PP -> OTHER: Возвращает:\nТОЛЬКО объявления
OTHER -> OTHER: Компиляция:\nОбъектный файл НЕ содержит\nкод функций, только ссылки
== Линковка ==
UTIL -> LINK: Utility.o:\n✓ Реализация stbi_load
OTHER -> LINK: Other.o:\n✗ Только ссылка на stbi_load
LINK -> LINK: Связывание:\nOther.o использует\nреализацию из Utility.o
LINK --> UTIL: Исполняемый файл:\nОдна копия реализации
note right of PP
**Ключевой момент:**
STB_IMAGE_IMPLEMENTATION
определен только в ОДНОМ
.cpp файле
end note
@enduml