В эфире рубрика выходного дня: Воскресный 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🔥40 10👍9❤5🦄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
🔥76❤22 6❤🔥3⚡2🦄1 1
Epic Games опубликовали док с улучшениями редактора материалов, которые появились в Unreal Engine 5.6
Shift#material #ue_tips #shader #unrealengine #ue5 #gamedev #lifeexe #lifeexecode
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍19🔥14 6❤4🦄1
This media is not supported in your browser
VIEW IN TELEGRAM
Полноценный брейкдаун спецэффекта падающего болида!
В качестве тренировки можно реализовать в
#vfx #material #shader #gamedev #unrealengine #ue5 #lifeexe #lifeexecode
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥36❤8😱5 2🦄1
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Полноценный VFX breakdown с бесплатными исходниками по созданию стилизованного эффекта
#niagara #vfx #material #shader #unrealengine #ue5 #gamedev #lifeexe #lifeexecode
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥37 6❤5🦄1 1
Детей без присмотра не оставляем
#пятничное #friday #cpp #unrealengine #ue5 #gamedev #lifeexe #lifeexecode #meme #humor
Please open Telegram to view this post
VIEW IN TELEGRAM
😁37 15 6❤2🦄1
Media is too big
VIEW IN TELEGRAM
Пятничная видео-игра сегодня — двухмерная point-n-click адвентура
#gamedev #pixelart #games #lifeexe #lifeexecode #fridaygame #coolgame
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤7 6🔥1🦄1
PHYSICALLYBASED — база данных параметров для физических материалов. Каждый материал содержит как минимум одну ссылку на источник, что позволяет проверить его достоверность
Репозиторий
API
Внутри освещается широкий спектр тем, включая трассировку лучей, моделирование материалов, методы глобального освещения и многое другое. Книга написана специалистами из Google и NVIDIA.
#rendering #pbr #free #lifeexe #lifeexecode #books #lifeexeBooks
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥29 10❤5🦄1 1
This media is not supported in your browser
VIEW IN TELEGRAM
#pixel_renderer #gamedev #pixel_art #tool #free #lifeexecode #lifeexecode
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20🔥10❤5🦄1