В эфире рубрика выходного дня: Воскресный C++
Написал большую статью на тему:
«Asserts в стандарте C++ и в Unreal Engine»
❗️ На Boosty и Patreon полная версия с множеством примеров!
По традиции сначала разбираем как все работает на чистом
C++, а потом смотрим, что происходит в Unreal Engine.
Assertions — это утверждения, проверяющие предположения программиста о корректности кода. Они помогают выявлять ошибки и документировать инварианты.
Инвариант — это условие, которое должно быть истинным всегда в определённом контексте.
Зачем нужны assertions?
Виды assertions
В стандартном C++ основной инструмент для реализации утверждений — это макрос препроцессора
assert, определенный в заголовочном файле <cassert> :stderr и немедленно завершает программу путем вызова функции std::abort() double div(double numerator, double denominator)
{
assert(denominator != 0.0);
return numerator / denominator;
}
Стандартный макрос
assert не имеет встроенного параметра для пользовательских сообщений. Однако существуют две распространенные идиомы для добавления диагностики, которая будет выведена в диагностическом сообщении в случае сбоя assert(divisor != 0 && "Divisor cannot be 0");
assert(("Divisor cannot be 0", divisor != 0));
Распространенная ошибка при использовании
assert — это включение в проверяемое выражение кода с побочными эффектами. Проблема в том, что когда определен макрос
NDEBUG, все выражение внутри assert удаляется из кода. Это может привести к тому, что логика программы в отладочной и релизной сборках будет отличаться. assert(InitializeSubsystem());
[[maybe_unused]] const bool bSuccess = InitializeSubsystem();
assert(bSuccess);
Unreal Engine расширяет стандартный макрос
assert , добавляя дополнительные возможности к рантайм проверкам, Имеются следующие семейства: check, verify, ensure.Семейство
check является прямым эквивалентом стандартного assert в Unreal Engine. Сбой check указывает на критическую ошибку в программе, и выполнение немедленно останавливается void AMyActor::CalculateJumpVelocity(AActor* JumpTarget, FVector& JumpVelocity)
{
check(JumpTarget != nullptr);
}
Остальные макросы данного семейства:
check, checkf, checkSlow, checkfSlow, checkCode, checkNoEntry, checkNoReentry, checkNoRecursion, unimplementedСледующее семейство макросов является решением проблемы побочных эффектов. Выражение внутри макроса
verify выполняется всегда, независимо от конфигурации сборки.Полный список макросов:
verify, verifyf, verifySlowДанное семейство макросов используется для сообщения о нефатальных ошибках. Программа не завершает работу, а отправляет отчет со стеком вызовов в Crash Reporter и продолжает выполнение:
ensure, ensureAlways, ensureMsgf, ensureAlwaysMsgf static_assertcheckverifycheckSlowensurecheckNoEntry или unimplementedcheckNoRecursioncheckNoReentryВ статье на Boosty и Patreon подробнее про каждый из макросов и static_assert
Всем чистого кода
Patreon | Boosty | PayPal
GitHub | X | LifeEXE School | Itch | Wiki | Курс по UE
#code #cpp #code_hints #lifeexeEDU #unrealengine #ue5 #gamedev #lifeexe #lifeexecode #best_practice #assert #clean_code
Please open Telegram to view this post
VIEW IN TELEGRAM
21🔥42👍11 11❤6🦄1 1
Поздравляю с началом нового учебного года!
Забирайте бесплатный купон на 100 мест на мой курс «Unreal Engine — полное руководство по разработке на С++»
Статистика по курсу на сегодня следующая
Студенты из
Всем спасибо за отзывы и прохождение!
Patreon | Boosty | PayPal
GitHub | X | LifeEXE School | Itch | Wiki | Курс по UE
#code #cpp #lifeexeEDU #unrealengine #ue5 #gamedev #lifeexe #lifeexecode #udemy #course #shooter #free #coupon
Please open Telegram to view this post
VIEW IN TELEGRAM
Udemy
Unreal Engine — полное руководство по разработке на С++
Раскройте возможности C++ для разработки игр в Unreal Engine
🔥78❤25 7❤🔥4⚡2🦄1 1
This media is not supported in your browser
VIEW IN TELEGRAM
Вышла
Visual Studio 2026 Insiders — так теперь называется preview сборка. Скачать бесплатную Community версию можно по ссылке Внутри:
Подробнее можно почитать в блоге
и также в тему
#vs #code #cpp #gamedev #lifeexe #lifeexecode
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥25❤10👍7🦄1 1
С днём программиста всех причастных!
И да.. стандарт
#day256 #code #cpp #programmer_day #gamedev #lifeexe #lifeexecode #humor
Please open Telegram to view this post
VIEW IN TELEGRAM
❤32😁27🔥10🎉8🤯4👍3 3🦄2
Media is too big
VIEW IN TELEGRAM
В новый Unreal Engine 5.7 завезли ИИ ассистента — плагин AIAssistant, который находится по адресу:
Engine\Plugins\Experimental\AIAssistantПлагин элементарный: он просто открывает веб-морду Epic Developer Assistant в отдельном окне редактора движка, и, кстати, работает без логина:
Всё выглядит так, что разработчики, создавая плагин для интеллекта искусственного решили пренебречь интеллектом естественным.
Лапидарно — несколько моментов, которые прямо бросаются в глаза
TSet в простейшем случае для 14 символов? Возможно, конечно автор изучал структуры данных на данном коде — кто знает:FString FAIAssistantConfig::GetMainUrlAsRegexString() const
{
static const TSet<FString::ElementType> CharactersToEscape{
'.', '*', '+', '?', '(', ')', '[', ']', '{', '}', '^', '$', '|', '\\',
};
FString Escaped;
Escaped.Reserve((MainUrl.Len() * 2) + 2 /* Allow for regex anchors */);
Escaped += FString::ElementType('^');
for (const FString::ElementType Character : MainUrl)
{
if (CharactersToEscape.Contains(Character))
{
Escaped += FString::ElementType('\\');
}
Escaped += Character;
}
Escaped += FString::ElementType('$');
Escaped.Shrink();
return Escaped;
}
TSet тут избыточен — создаётся хеш-таблица с бакетами и метаданными для всего нескольких статических символов. Хватит switch/if или простейшей строки-набора:static const FString CharsToEsc = TEXT(".+*?()[]{}^$|\\");FString::ElementType в данном случае только усложняет читаемость — можно смело использовать TCHAR.FString имеет методы Append и AppendChar, которые аккуратно избавят от громоздких конструкций вида += FString::ElementTypeEscaped += FString::ElementType('^');Escaped.AppendChar('^');GetMainUrlAsRegexString привязана к классу. Очевидно, её можно освободить или оформить как часть библиотеки утилит, передавая MainUrl параметром. Это разблокирует (помимо славы выдающегося архитектора ПО):IMPLEMENT_SIMPLE_AUTOMATION_TEST, хотя Automation Spec уже давно доступен. Ничего критичного, но зачем тянуть старое в новом плагине.Patreon | Boosty | PayPal
GitHub | X | LifeEXE School | Itch | Wiki | Курс по UE
#code #cpp #plugin #unrealengine #ue5 #gamedev #lifeexe #lifeexecode #ai #ai_assistant #tests #code_review
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥37 12🦄7 4❤2😁2⚡1👍1
Media is too big
VIEW IN TELEGRAM
Новое видео в эту пятницу на канале — код-ревью плагина AI Assistant, о котором недавно был пост.
В ноябре возвращаемся к разработке игрового движка🤘 Материалы в постпродакшне. Об этом рассказываю в начале код-ревью😎
Увидимся в конце рабочей недели на канале!
💡Плейлист code review
Patreon | Boosty | PayPal
GitHub | Itch | X | Wiki | LifeEXE School
#code #cpp #plugin #unrealengine #ue5 #gamedev #lifeexe #lifeexecode #lifeexe_youtube #ai #ai_assistant #code_review
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥31❤8 4👍1🦄1 1
Видео с код-ревью AI Assistant плагина сегодня вечером на канале
Подключайтесь вечером в чат премьеры
— буду рад всех видеть
Patreon | Boosty | PayPal
GitHub | Itch | X | Wiki | LifeEXE School
#code #cpp #plugin #unrealengine #ue5 #gamedev #lifeexe #lifeexecode #lifeexe_youtube #ai #ai_assistant #code_review
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Unreal Engine 5.7 /// Code review плагина AI Assistant
Мой курс «Unreal Engine — полное руководство по разработке на С++»
https://www.udemy.com/course/unrealengine/?couponCode=C1FB4300109DFB12C896
Ссылки из видео:
https://dev.epicgames.com/community/assistant/unreal-engine
https://github.com/life-exe/devops_ue…
https://www.udemy.com/course/unrealengine/?couponCode=C1FB4300109DFB12C896
Ссылки из видео:
https://dev.epicgames.com/community/assistant/unreal-engine
https://github.com/life-exe/devops_ue…
🔥26👍7🦄5 1 1
LifeEXE | Unreal Engine | CG
Вышел официальный релиз Visual Studio 2026
Много интересного для C++ разработчиков
Активно развивают поддержку Unreal Engine проектов
Все подробности в блоге Visual Studio
На моем канале имеется научно-популярные видео в тему
#vs #visual_studio #vs2026 #code #cpp #gamedev #lifeexe #lifeexecode
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20🔥15❤8🦄1👾1
Вайбкодеры изобрели новую нотацию TOON — Token-Oriented Object Notation
Формат создан для экономии количества токенов. Очень всё это напоминает обычный CSV.
#toon #notaion #protocol #vibe_coding #ai #code #gamedev #lifeexe #lifeexecode
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Подборка плагинов для прожарки VS CODE
#code #vs_code #gamedev #lifeexe #lifeexecode
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥21😎10 6😱3 3🦄1
В
ArraySizeEnum UENUM(BlueprintType)
enum class ECharacterClass : uint8
{
Warrior UMETA(DisplayName = "Warrior"),
Priest UMETA(DisplayName = "Priest"),
Ranger UMETA(DisplayName = "Ranger"),
Druid UMETA(DisplayName = "Druid"),
Count UMETA(Hidden)
};
// UI цвета для каждого класса
UPROPERTY(EditAnywhere, meta = (ArraySizeEnum = "ECharacterClass"))
FColor UIColors[(uint8)ECharacterClass::Count];
// Базовое здоровье для каждого класса
UPROPERTY(EditAnywhere, meta = (ArraySizeEnum = "ECharacterClass"))
float BaseHealth[(uint8)ECharacterClass::Count];
enumenumenum элемент Count/MAX/Total с пометкой UMETA(Hidden) — так удобнее определять размер массива и этот элемент не будет виден в редактореBlueprintReadWrite/BlueprintReadOnlyC-style cast для компактности кода, но лучше использовать современный подход со static_castPatreon | Boosty | PayPal
GitHub | Itch | X | Wiki | LifeEXE School
#tips_and_tricks #unrealengine #ue5 #code #cpp #gamedev #lifeexe #lifeexecode
Please open Telegram to view this post
VIEW IN TELEGRAM
5🔥27 8 3🐳2👍1🦄1