59 lines
2.1 KiB
Text
59 lines
2.1 KiB
Text
@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
|