C/C++ Ready | Программирование
14.5K subscribers
1.08K photos
52 videos
457 links
Авторский канал по разработке на C и C++.
Ресурсы, гайды, задачи, шпаргалки.
Информация ежедневно пополняется!

Автор: @energy_it

РКН: https://clck.ru/3QREHc

Реклама на бирже: https://telega.in/c/cpp_ready
Download Telegram
Простой мини-логгер на std::format!

Хотите простой и лёгкий логгер с уровнями и метками времени без внешних библиотек?

Подключаем заголовки:
#include <iostream>
#include <chrono>
#include <format>
#include <string_view>


Определяем уровни и функцию вывода:
enum class Level { INFO, WARN, ERROR };

void log(Level lvl, std::string_view msg) {
auto now = std::chrono::system_clock::now();
auto ts = std::format("{:%H:%M:%S}", now);
std::print("[{}][{}] {}\n",
ts,
lvl==Level::INFO ? "I" : lvl==Level::WARN ? "W" : "E",
msg);
}


Используем в main() для разных уровней:
int main() {
log(Level::INFO, "Приложение запущено");
log(Level::WARN, "Память близка к лимиту");
log(Level::ERROR, "Ошибка при инициализации");
return 0;
}


🔥 Мини-логгер на чистом стандарте обеспечивает гибкие уровни и метки времени без лишних зависимостей.

📣 C++ Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥208👍5😁1
Как избежать скрытых багов из-за неявных конверсий enum?

enum class решает проблему одним движением: каждое перечисление становится полноценным типом.

Классические перечисления ведут себя как обычные int и легко «скрещиваются» друг с другом:
enum Status { Ok, Error };
enum Color { Red, Green };

set_status(Red); // компилируется без варнингов!


Передать Color вместо Status больше не получится — компилятор остановит сборку (см. код на картинке).

🔥 Используйте enum class по умолчанию; к старым enum возвращайтесь лишь ради legacy-кода.

📣 C++ Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
23👍8🔥5😁2
👩‍💻 Когда сортировка подчиняется вашим правилам?

Один небольшой кусок логики решает, кто в списке окажется впереди, а кто уйдёт вниз, превращая сортировку в понятные читаемые правила.

В этом гайде:

Разберём, как описывать порядок элементов простыми условиями;

Покажем, как добавить второй признак сравнения без шума;

Научимся быстро менять логику сортировки под разные задачи


Освоив такие приёмы, вы перестанете бояться сложных списков и будете управлять ими уверенно каждый день.

📣 C++ Ready | #гайд
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16🤝95👍5
Подсказки компилятору — атрибуты [[likely]] и [[unlikely]] в C++20

В современном C++ важно не только *что* делает код, но и *как часто* выполняются разные ветки. Атрибуты [[likely]] и [[unlikely]] помогают подсказать компилятору, какие условия встречаются чаще — это может улучшить branch prediction и чуть ускорить критичные участки.

С C++20 можно писать так:
int classify(int x) {
if (x >= 0) [[likely]] {
return 1; // «обычный» путь
} else [[unlikely]] {
return -1; // редкий случай
}
}

int main() {
std::cout << classify(10) << "\n"; // чаще
std::cout << classify(-5) << "\n"; // реже
}


Здесь мы явно говорим компилятору: позитивные значения — норма, отрицательные — редкость. Внутри if это выглядит аккуратно, без лишних макросов и #ifdef.

Атрибуты также работают в switch:
const char* to_string_error(int code) {
switch (code) {
case 0:
[[likely]];
return "OK";
case 1:
return "Network error";
default:
[[unlikely]];
return "Unknown error";
}
}

Здесь case 0 — самый вероятный путь, а default помечен как маловероятный, но важный для диагностики.

🔥 Такие подсказки не гарантируют ускорения, но помогают компилятору лучше оптимизировать горячие участки и делают намерения разработчика явными прямо в коде.

📣 C++ Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
16🔥12👍7🤝1
👩‍💻 Прокачиваем свою память при помощи мини-игры "Запомни число"

Показываем числа всего на несколько секунд, стираем экран и спрашиваем одно из них, превращая обычный запуск программы в маленький тренажёр памяти.

В этой задаче:

Соберёшь короткую игру, которая проверяет внимательность и память;

Почувствуешь, как несколько секунд ожидания создают лёгкое напряжение;

Увидишь, как привычное окно превращается в маленький полигон.


А если добавить несколько раундов, игра постепенно становится привычным вечерним зарядом для мозга на каждый день.

📣 C++ Ready | #задача
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2512🤝6
👍38🔥116👎1
👩‍💻 Вектор под контролем!

Прокачай std::vector так, чтобы он работал на тебя, а не против. Заранее резервируй память, аккуратно вставляй и удаляй элементы, конструируй объекты прямо внутри контейнера и безболезненно ходи в C-API через data().

📣 C++ Ready | #шпора
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥26🤝15👍104