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

Автор: @energy_it

Заявление в РКН: № 6382873737

Реклама на бирже: https://telega.in/c/cpp_ready
Download Telegram
Как не засорять область видимости временными переменными?

Классический C++-код часто выглядит так:
auto it = scores.find("neo");
if (it != scores.end()) {
std::cout << it->second;
}


it живёт дальше по коду, хотя нужен только для одного if.
Легко случайно переиспользовать его в другом месте.

С C++17 можно объявить переменную прямо в условии:
if (auto it = scores.find("neo"); it != scores.end()) {
std::cout << "Score: " << it->second << '\n';
} else {
std::cout << "Not found\n";
}


Тот же приём работает и для switch, while и даже проверки результата парсинга или открытия файла.

🔥 Полезно везде, где переменная нужна ровно для одной проверки — например, find(), lock_guard, результат парсера, дескриптор ресурса.

📣 C++ Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🔥125
👩‍💻 Рассмотрим thread — простой и эффективный способ добавить параллельность в свой код!

Создавай параллельные потоки и управляй их завершением через join() или detach(). Это повышает производительность, но важно контролировать жизненный цикл потоков, чтобы избежать ошибок и утечек ресурсов.

📣 C++ Ready | #шпора
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18🤝96👍4
Простой мини-логгер на 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
🔥188👍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
21👍7🔥5😁2
— Ты уволен
— Почему?
— Мы оплатили GPT-5, ты больше не нужен.


Вы тоже в ах@е с такого расклада? Учился лет 5, потом столько же батрачил за копейки ради опыта — чтобы тебя заменила еб@чая железяка.

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

Чтобы в кратчайшие сроки выйти на уровень элиты и стать топом в сфере — подпишитесь на канал @devsp. Его автор раскрывает неочевидные секреты: как в 3 месяца уместить 6 лет обучения, достойно пройти любое собеседование и что делать, чтобы лучшие компании дрались за вас.

А временами подкидывает крутые вакансии и лайфхаки, после которых вас с руками оторвут даже без опыта.

Это всё равно что встретить Нео и войти в 10% тех, кто сломал систему. Подписывайтесь: @devsp
👎25😁4
👩‍💻 Когда сортировка подчиняется вашим правилам?

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

В этом гайде:

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

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

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


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

📣 C++ Ready | #гайд
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥125👍5🤝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
13🔥7👍6🤝1
This media is not supported in your browser
VIEW IN TELEGRAM
⚡️ Программисты из CodeGuard слили в телеграмм тонны инфы

🔥 Отсортировали и разбили по каналам:

|- - -
📂 Python — 428ГБ
|
|- - -
📂 Хакинг & infosec — 573ГБ
|
|- - -
📂 Linux & Bash — 652ГБ
|
|- - -
📂 Работа IT — 356ГБ
|
|- - -
📂 Общее IT — 1526ГБ

📌 Гайды, шпаргалки, книги, задачи и ресурсы для каждого.
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍1🔥1