Библиотека собеса по C++ | вопросы с собеседований
4.71K subscribers
384 photos
2 videos
163 links
Вопросы с собеседований по C++ и ответы на них.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/9ccf302b

Работать у нас: https://job.proglib.io/

Наши каналы: https://yangx.top/proglibrary/9197
加入频道
🔮 assert

assert или утверждение — давно появившийся #define из стандартной библиотеки

Принцип работы
- Если выражение внутри assert ложное, будет terminate программы
- Для release сборке assert превратится в пустышку

Особенности
- В C++11 появился static_assert — применяется для выражений, которые могут быть вычислены в compile time
- assert очень часто используется в gamedev-коде, даже когда удобнее было бы применить try...catch. Это делается по нескольким причинам: assert дешевле (чем try...catch), в release сборке его вообще нет, поэтому можно их писать чуть ли не везде
🍔 Отладочные макросы

Отладочные макросы в C++ используются для упрощения процесса отладки и диагностики программного кода

Основные отладочные макросы включают assert, static_assert и пользовательские макросы

🍓 assert

Макрос assert определён в заголовочном файле <cassert> и используется для проверки логических выражений во время выполнения программы. Если выражение вернёт false, assert завершает выполнение программы и выводит сообщение об ошибке
#include <cassert>

void test(int x) {
assert(x > 0 && "x must be positive");
// остальной код функции
}

int main() {
test(5); // проходит проверку
test(-3); // приводит к ошибке во время выполнения
return 0;
}


🍒 static_assert

static_assert введён в C++11 и позволяет проверять условия на этапе компиляции. Это особенно полезно для проверки условий, которые должны выполняться всегда, независимо от состояния программы во время выполнения

#include <type_traits>

template <typename T>
void check() {
static_assert(std::is_integral<T>::value, "T must be an integral type");
}

int main() {
check<int>(); // проходит проверку
check<float>(); // ошибка компиляции: T must be an integral type
return 0;
}


❗️Начиная с C++11 и C23 static_assert является ключевым словом

🫐 Пользовательские отладочные макросы

Вы также можете определять собственные макросы для отладки, которые помогут вам выводить дополнительную информацию или выполнять специфические проверки

#include <iostream>

#define DEBUG

#ifdef DEBUG
#define DEBUG_PRINT(x) std::cout << x << std::endl
#else
#define DEBUG_PRINT(x)
#endif

int main() {
int value = 42;
DEBUG_PRINT("Value: " << value);
return 0;
}