Полезные материалы по всему, что может быть полезно плюсовику/сишнику.
C++20 в bare-metal программировании, работа с регистрами микроконтроллеров Cortex-M
Сегодня я хотел бы обсудить тему, с которой так или иначе сталкивался почти каждый программист встраиваемых устройств без использования настоящих операционных систем, а именно прямое управление периферийными узлами микроконтроллера. A конкретнее, я хотел бы обсудить повышение безопасности при управлении периферийными модулями без потери эффективности, гибкости и читаемости.
Кто-то может подумать, что данная тема уже рассказана вдоль и поперек в многочисленных мануалах по проектам для STM32 (например, хабр). Те же, кто уже понял о чем будет идти речь, может подумать что это полное повторение уже существующих подобных идей (например эта и другие статьи автора зародили во мне интерес к этой теме несколько лет назад, а вот в языке программирования Rust большинство ящиков/крейтов Cortex-M/PAC уже используют проверками безопасности при манипулировании регистрами). Однако, не нужно спешить с выводами. Я полагаю, что могу дать интересную и полезную информацию для обоих вышеперечисленных категорий читателей.
Перед началом, тему того 'Зачем вообще лезть на уровень регистров, если каждый производитель дает HAL/BSP?' я оставлю вне рамок данной статьи. Я предполагаю, что если читатель открыл статью, то ему уже интересна данная тема, и мне не столь важно почему.
https://habr.com/ru/articles/819499/
#cpp #programming
👉 @cpp_lib
Как сравнить целые числа со знаком и без знака в C++20?
Сравнение двух чисел должно быть простым, верно? Может быть, и должно, но в языке C++ это не так, даже если ограничить сравнение областью целых чисел.
Если попытаться сравнить знаковое и беззнаковое целое число, то возможны несколько вариантов развития событий. Возможно, это действительно сработает, и вы никогда не узнаете, чем рисковали. Возможно, все будет не так, как вы ожидали, и вы потратите немало времени, ломая голову над тем, что же произошло. Возможно также, что он не сработает в соответствии с вашими ожиданиями, но это останется незамеченным.
https://www.sandordargo.com/blog/2023/10/11/cpp20-intcmp-utilities
#cpp #programming
👉 @cpp_lib
🟢 Практический вебинар для начинающих С++-разработчиков — почему утекает динамически выделенная память и как с этим бороться?
Ждем вас на открытом уроке, где мы разберем:
- зачем нужна динамическая память и сложности работы с ней в C++;
- основные ошибки, которые возникают при работе с динамической памятью;
- инструментарий диагностики ошибок, такой как valgrind и sanitizers;
- идиому RAII в контексте динамической памяти.
👨🎓 Спикер — опытный разработчик и руководитель команд, преподаватель и эксперт конференций C++ Russia, escar Europe.
⏰ Встречаемся 20 июня в 20:00 мск в преддверии старта курса «Специализация C++ Developer». Все участники вебинара получат специальную цену на обучение!
➡ Регистрируйтесь прямо сейчас, чтобы занять место на открытом уроке и получить запись: РЕГИСТРАЦИЯ
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Я сделал C++ версию функции Python print()
Мне нравится функция Python print(obj...)
, поскольку она может выводить переменные любого типа: числа, строки, массивы и объекты, а также полезна для отладки.
В последнее время я занимаюсь соревновательным программированием, но эта функция помогает мне отлаживать и там.
https://dev.to/philip82148/i-made-a-c-version-of-consolelog-o88
#cpp #programming
👉 @cpp_lib
🎓👨💻 Магистратура ФИТ НГУ «Интернет вещей»: готовим IoT-разработчиков с широким технологическим стэком, способных решать задачи на стыке науки и прорывных IT-технологий для разных сфер жизни.
Магистерская программа Новосибирского госуниверситета направлена на подготовку IoT-инженеров, разрабатывающих низкоуровневые решения для встроенных управляющих и сенсорных систем с учетом их специфики и ресурсных ограничений. 🤖 Выпускники программы получают комплексные знания, благодаря чему могут решать широкий спектр IoT-задач для любых сфер жизни – от медицины и энергетики до кибербезопасности и автомобилестроения.
✨ Программа «Интернет вещей» – это современные технологии, актуальные навыки и мощный старт IT-карьеры:
✅ Стажировки в высокотехнологичных компаниях и решение реальных задач для технологических партнеров НГУ.
✅ Участие в прорывных проектах, таких как Smart City, Smart Hospital, СКИФ и других проектах в сфере цифровой медицины, биологии, сельского хозяйства, автомобилестроения.
✅ Практика на передовом оборудовании с самыми современными технологиями.
✅ Гибкий график, позволяющий совмещать учебу с работой.
✅ Много бюджетных мест.
✅ Преподаватели-эксперты — реальные практики из ведущих компаний-высокотехов и научно-исследовательских центров.
✅ Современный кампус в Академгородке с новыми общежитиями, удобной инфраструктурой, ручными белками и чистым лесным воздухом.
👀 Для кого?
Программа подойдет выпускникам бакалавриата и специалитета в области IT, математики, физики и смежных инженерных направлений.
❗️ Успей подать заявку до 5 августа!
👉 Подробнее о программе: https://education.nsu.ru/promo/iot/
Input parser - библиотека для парсинга командной строки
https://github.com/gianluisdiana/InputParser
#cpp #programming
👉 @cpp_lib
Подборка Telegram каналов для программистов
Системное администрирование 📌
/channel/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
/channel/sysadminof Книги для админов, полезные материалы
/channel/i_odmin Все для системного администратора
/channel/i_odmin_book Библиотека Системного Администратора
/channel/i_odmin_chat Чат системных администраторов
/channel/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
/channel/sysadminoff Новости Линукс Linux
/channel/tikon_1 Новости высоких технологий, науки и техники💡
/channel/mir_teh Мир технологий (Technology World)
/channel/rust_lib Полезный контент по программированию на Rust
/channel/golang_lib Библиотека Go (Golang) разработчика
/channel/itmozg Программисты, дизайнеры, новости из мира IT.
/channel/phis_mat Обучающие видео, книги по Физике и Математике
/channel/php_lib Библиотека PHP программиста 👨🏼💻👩💻
/channel/nodejs_lib Подборки по Node js и все что с ним связано
/channel/ruby_lib Библиотека Ruby программиста
1C разработка 📌
/channel/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С
Программирование C++📌
/channel/cpp_lib Библиотека C/C++ разработчика
/channel/cpp_knigi Книги для программистов C/C++
/channel/cpp_geek Учим C/C++ на примерах
Программирование Python 📌
/channel/pythonofff Python академия. Учи Python быстро и легко🐍
/channel/BookPython Библиотека Python разработчика
/channel/python_real Python подборки на русском и английском
/channel/python_360 Книги по Python Rus
Java разработка 📌
/channel/BookJava Библиотека Java разработчика
/channel/java_360 Книги по Java Rus
/channel/java_geek Учим Java на примерах
GitHub Сообщество 📌
/channel/Githublib Интересное из GitHub
Базы данных (Data Base) 📌
/channel/database_info Все про базы данных
Мобильная разработка: iOS, Android 📌
/channel/developer_mobila Мобильная разработка
/channel/kotlin_lib Подборки полезного материала по Kotlin
Фронтенд разработка 📌
/channel/frontend_1 Подборки для frontend разработчиков
/channel/frontend_sovet Frontend советы, примеры и практика!
/channel/React_lib Подборки по React js и все что с ним связано
Разработка игр 📌
/channel/game_devv Все о разработке игр
Вакансии 📌
/channel/sysadmin_rabota Системный Администратор
/channel/progjob Вакансии в IT
Чат программистов📌
/channel/developers_ru
Библиотеки 📌
/channel/book_for_dev Книги для программистов Rus
/channel/programmist_of Книги по программированию
/channel/proglb Библиотека программиста
/channel/bfbook Книги для программистов
/channel/books_reserv Книги для программистов
БигДата, машинное обучение 📌
/channel/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning
Программирование 📌
/channel/bookflow Лекции, видеоуроки, доклады с IT конференций
/channel/coddy_academy Полезные советы по программированию
QA, тестирование 📌
/channel/testlab_qa Библиотека тестировщика
Шутки программистов 📌
/channel/itumor Шутки программистов
Защита, взлом, безопасность 📌
/channel/thehaking Канал о кибербезопасности
/channel/xakep_1 Статьи из "Хакера"
Книги, статьи для дизайнеров 📌
/channel/ux_web Статьи, книги для дизайнеров
Английский 📌
/channel/UchuEnglish Английский с нуля
Математика 📌
/channel/Pomatematike Канал по математике
Excel лайфхак📌
/channel/Excel_lifehack
⚡️ Учись программировать на Solidity и создавать инновационные блокчейн-решения!
Пройди короткий тест и проверь, можешь ли ты осилить программирование на Solidity.
Ответишь успешно на все вопросы — сможешь попасть на продвинутый курс "Solidity Developer" от OTUS по специальной цене!
➡️ ПРОЙТИ ТЕСТ: https://vk.cc/cxshlM
🎁 Бонусом за прохождение теста, получишь бесплатный доступ к записям открытых вебинаров курса уже сейчас!
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Что такое Uniform initialization? Aggregate initialization?
Uniform initialization, введенная в C++11, позволяет использовать единый синтаксис для инициализации переменных и объектов, начиная от примитивных типов до агрегатов¹. Другими словами, она вводит инициализацию скобками, которая использует фигурные скобки {} для заключения значений инициализатора. Синтаксис выглядит следующим образом: type var_name {arg1, arg2, ....arg n}
.
Aggregate initialization - это форма инициализации списком для массивов или типов класса (часто структур или объединений), которые имеют: нет приватных или защищенных членов, нет пользовательских конструкторов, кроме явно заданных или удаленных конструкторов . Это позволяет напрямую инициализировать элементы агрегатов. Для этого мы предоставляем список инициализаторов в качестве инициализатора, который представляет собой список значений, разделенных запятыми.
Например, если у вас есть структура с несколькими членами:struct Employee {
int id {};
int age {};
double wage {};
};
Когда мы определяем объект с типом структуры, нам нужен способ инициализации нескольких членов во время инициализации:Employee joe; // как мы инициализируем joe.id, joe.age и joe.wage?
Агрегаты используют форму инициализации, называемую агрегатной инициализацией, которая позволяет нам напрямую инициализировать элементы агрегатов. Для этого мы предоставляем список инициализаторов в качестве инициализатора, который представляет собой список значений, разделенных запятыми. Так же как обычные переменные могут быть скопированы, напрямую инициализированы или списком инициализированы, есть 3 формы агрегатной инициализации.
#cpp #programming
👉 @cpp_lib
🟡 Как прокачать свои скиллы в разработке на С++?
Прийти на бесплатный практический урок «Условные переменные в С++» от OTUS, где мы разберем:
— что такое std::condition_variable и какие задачи он решает;
— типовые ошибки при его использовании;
— что такое spurious wakeup.
А также напишем несколько concurrency-примитивов на основе condition_variable.
🙋♂️Спикер — ведущий программист с большим международным опытом.
⏰ Встречаемся 11 июня в 20:00 мск в преддверии старта курса «C++ Developer. Professional». Все участники вебинара получат специальную цену на обучение и консультацию от менеджеров OTUS!
➡ Регистрируйтесь прямо сейчас, чтобы не пропустить бесплатный урок.
Примеры исходного кода C++
Эта страница содержит примеры исходного кода функций стандартной библиотеки программирования C++.
https://www.sourcecodeexamples.net/p/cpp-source-code-examples.html
#cpp #programming
👉 @cpp_lib
📚C++ High Performance for Financial Systems: Build efficient and optimized financial systems by leveraging the power of C++
Автор: Ariel Silahian (2024)
Краеугольным камнем этой книги является освещение вопросов проектирования и архитектуры систем. Книга начинается с описания роли C++ в финансах и трейдинге. Вы узнаете о принципах и методологии построения систем, способных обрабатывать огромные объемы данных, с легкостью выполнять сложные торговые стратегии и поддерживать высочайший уровень надежности. Вооружившись этими знаниями, вы сможете справиться даже с самыми сложными торговыми сценариями.
#cpp #programming
👉 @cpp_lib
Regular expressions library (since C++11)
Библиотека регулярных выражений предоставляет класс, представляющий регулярные выражения, которые являются своего рода мини-языком, используемым для выполнения сопоставления шаблонов в строках. #include <iostream>
#include <iterator>
#include <regex>
#include <string>
int main()
{
std::string s = "Some people, when confronted with a problem, think "
"\"I know, I'll use regular expressions.\" "
"Now they have two problems.";
std::regex self_regex("REGULAR EXPRESSIONS",
std::regex_constants::ECMAScript | std::regex_constants::icase);
if (std::regex_search(s, self_regex))
std::cout << "Text contains the phrase 'regular expressions'\n";
std::regex word_regex("(\\w+)");
auto words_begin =
std::sregex_iterator(s.begin(), s.end(), word_regex);
auto words_end = std::sregex_iterator();
std::cout << "Found "
<< std::distance(words_begin, words_end)
<< " words\n";
const int N = 6;
std::cout << "Words longer than " << N << " characters:\n";
for (std::sregex_iterator i = words_begin; i != words_end; ++i)
{
std::smatch match = *i;
std::string match_str = match.str();
if (match_str.size() > N)
std::cout << " " << match_str << '\n';
}
std::regex long_word_regex("(\\w{7,})");
std::string new_s = std::regex_replace(s, long_word_regex, "[$&]");
std::cout << new_s << '\n';
}
https://en.cppreference.com/w/cpp/regex
#cpp #programming
👉 @cpp_lib
Объявляю ошибку вида if (x = 42) вымирающей и заношу её в Красную книгу C и C++ багов
Если спросить программиста, какие баги чаще всего можно встретить в C и C++ коде, он назовёт разыменование нулевого указателя, неопределённое поведение, выход за границу массива и другие, на его взгляд, типовые паттерны ошибок. Скорее всего, он назовёт и случайное присваивание в условии. Но действительно ли эта ошибка распространена в наше время?
Так уж сложилось, что в языке C и C++ для оператора присваивания используется символ =, а для сравнения ==. Как следствие, возможны опечатки, когда вместо сравнения пишут = и получают компилируемый, но неправильно работающий код.
https://habr.com/ru/companies/pvs-studio/articles/818215/
#cpp #programming
👉 @cpp_lib
Высокотехнологичная компания YADRO в поиске тех, кто программирует на C и С++ 🔍
Актуальные вакансии:
1️⃣ Software Engineer C/C++
2️⃣ Senior C++ developer/Старший инженер-программист С++
3️⃣ Старший/ведущий инженер-программист встраиваемых интерфейсов
4️⃣ Linux Kernel Developer (Linux/WebUI) /Инженер-разработчик C (risc-V)
Ты сможешь реализовывать себя и стать частью команды специалистов, которые создают технологические решения и инновации мирового уровня.
Что ещё тебя ждёт:
– достойная зарплата (размер обсуждается на собеседовании) и прозрачная система премий;
– обучение за счёт компании: учебный портал с курсами и лекциями от экспертов, дополнительное профессиональное обучение, изучение английского, участие в конференциях;
– возможность учиться у лучших специалистов индустрии, расти в рамках своей роли, а также участвовать во множестве различных проектов;
– личное участие в становлении процессов и продуктов, возможность увидеть результат своей работы;
– большое инженерное сообщество, которое постоянно развивается;
– гибридный или удалённый формат работы;
– ДМС со стоматологией с первого дня, консультации юристов, психологов, экспертов по ЗОЖ и управлению финансами;
– скидки для сотрудников, дополнительные day-off;
– комфортные офисы в Москве, Санкт-Петербурге, Нижнем Новгороде и Минске.
Откликайся по ссылкам и присоединяйся к YADRO!
.💡 Разрабатываешь на C++? Освой кроссплатформенную разработку на QT и ОС Аврора
❗️ Вкладывай в перспективу - вкладывай в себя!
Пройди тест из 20 вопросов и проверь, насколько хорошо nы знаешь язык C++ и готов освоить QT и ОС Аврора .
Сможешь сдать — пройдёшь на продвинутый онлайн-курс "Разработка прикладного ПО на Qt и ОС Аврора" от OTUS.
👉 ПРОЙТИ ТЕСТ: https://vk.cc/cxKBIx
🎁 Успей на курс! Только до 23 июня скидка 10%, подробности у наших менеджеров - после прохождения теста они свяжутся с вами.Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Сборка мусора: как это делается в системном программировании
Давайте поговорим об одной из наиболее критичных по производительности программ, которой вы пользуетесь ежедневно: о вашей операционной системе. Поскольку при каждом разгоне железа вы получаете дополнительную вычислительную мощность, операционная система никогда за этим не поспевает. Поэтому постоянно доводится читать о том, как разработчики ядра и драйверов выжимают последнее из своего кода.
Кроме того, операционные системы должны быть рассчитаны на массовую конкурентность. Дело не только в том, что наша операционная система отвечает за планирование всех процессов и потоков пользовательского пространства, но и в том, что в ядре хватает собственных потоков, а также обработчиков прерываний, нужных для взаимодействия с железом. Требуется минимизировать время, которое тратится на ожидание, так как, опять же, при любой задержке вы воруете время ваших пользователей.
https://bitbashing.io/gc-for-systems-programmers.html
#cpp #programming
👉 @cpp_lib
Разбор кода игры Super Mario на языке C++
00:00 Начало
00:17 Шаг 1: Создание игрока
01:48 Шаг 2: Создание платформера
07:03 Шаг 3: Создание флажка
08:26 Шаг 4: Поставить изображение frend
08:57 Шаг 5: Добавления надписей для уровня
11:25 Шаг 6: Добавления врагов
16:45 Шаг 7: Добавление урона и возрождение игрока
19:13 Шаг 8: Добавление меню
23:31 Шаг 9: Добавление музыки и звуки
26:43 Игра готова
Ссылки на картинки и звуки https://disk.yandex.ru/d/V03815gsktfqUw
Ссылка на код https://gist.github.com/Andrey-byte/0a8834600a241eda303e293498c664fb
#cpp #programming
👉 @cpp_lib
50 веб сайтов по изучению C/C++
В этой статье я расскажу о 50 сайтах, которые, по моему мнению, должен знать и добавить в закладки каждый разработчик на Си или Си++. В этом списке представлены прямые ссылки на исходные коды программ вместе с их описанием.
https://www.mycplus.com/featured-articles/50-c-cpp-source-code-websites/
#cpp #programming
👉 @cpp_lib
Идея по улучшению многопоточного кода
Александр Корнилов
Александр описывает подход к написанию многопоточного кода, который помогает избежать типовых ошибок, связанных с использованием базовых примитивов синхронизации. Демонстрация идеи проходит на живых примерах кода на современном C++.
источник
#cpp #programming
👉 @cpp_lib
Идеальная передача и универсальные ссылки в C++
https://eli.thegreenplace.net/2014/perfect-forwarding-and-universal-references-in-c
#cpp #programming
👉 @cpp_lib
👩💻 Шпаргалка по C++
Шпаргалка фокусируется на языке, а не стандартной библиотеке, и учитывает особенности C++11/C++14
#cpp #programming
👉 @cpp_lib
Краткое сравнение популярных функций измерения времени
Решил обновить свою старую крохотную библиотечку для тайминга кода. Измерение коротких временнЫх интервалов в ней выполнялось с помощью: инструкции RDTSC при компиляции MSC для x86 и gettimeofday при сборке GCC под Linux. IMHO, на сегодняшний день это не самые правильные методы, и захотелось объективно выбрать что-то более точное и лёгкое. Для этого были измерены несколько параметров наиболее популярных функций измерения времени. Результатами этих измерений и делюсь с вами (вдруг кому тоже интересно).
https://habr.com/ru/articles/818965/
#cpp #programming
👉 @cpp_lib
📕Pro Cryptography and Cryptanalysis with C++23: Creating and Programming Advanced Algorithms, 2nd Edition
Автор: Marius Iulian Mihailescu (2023)
Сформировать прочные навыки написания криптографических алгоритмов и схем/модулей безопасности с использованием языка C++23 и его новых возможностей. Эта книга научит вас правильным методам написания продвинутых криптографических алгоритмов, таких как алгоритмы криптографии на основе эллиптических кривых, криптографии на основе решетки, шифрования с поиском и гомоморфного шифрования. Вы также рассмотрите внутренние криптографические механизмы и узнаете общие способы реализации и правильного использования алгоритмов на практике.
#cpp #programming
👉 @cpp_lib
Go-like каналы на C++
Каналы (channels, pipes) – это удобная абстракция для построения приложений, работающих в многопоточной среде. Они используются для передачи сообщений между потоками и, одновременно с этим, как средство синхронизации потоков. Я буду ссылаться на "Go-style channels", т.к. на мой взгляд, важная особенность каналов в языке GO – это возможность их мультиплексировать.
Реализации каналов на языке C++, конечно же, есть, например, в библиотеке boost::fibers, можно найти реализацию двух видов каналов. В документации boost::fibers можно найти описания способов мультиплексирования, правда не самих каналов, но и к ним можно применить подобную технику.
https://habr.com/ru/articles/805561/
#cpp #programming
👉 @cpp_lib
Что такое явное и неявное приведение типов в С++? Зачем делать explicit-конструктор?
Ответ:
⚫️Явное приведение типов в C++ происходит, когда программист явно указывает, что значение одного типа должно быть преобразовано в значение другого типа. Это делается с помощью операторов приведения типов, таких как static_cast
, dynamic_cast
, const_cast
и reinterpret_cast¹
.
⚫️Неявное приведение типов в C++ происходит автоматически, когда компилятор обнаруживает, что значение одного типа используется в контексте, где ожидается значение другого типа. Например, если вы пытаетесь присвоить значение типа int переменной типа double
, компилятор автоматически преобразует значение int
в значение double⁴
.
⚫️Ключевое слово explicit
используется для предотвращения неявных преобразований¹. Оно может быть использовано с конструкторами и функциями преобразования для указания того, что они не могут использоваться для неявных преобразований и копирования инициализации.
⚫️Например, если у вас есть класс с конструктором, который принимает один аргумент, вы можете использовать ключевое слово explicit, чтобы предотвратить неявное преобразование аргумента в объект вашего класса. Это может быть полезно, если вы хотите избежать ошибок, связанных с неожиданными неявными преобразованиями.
⚫️Вот простой пример использования ключевого слова explicit с конструктором: class MyClass {
public:
explicit MyClass(int x) : m_x(x) {}
private:
int m_x;
};
int main() {
MyClass a = 5; // Ошибка: неявное преобразование запрещено
MyClass b(5); // ОК: явное преобразование
}
⚫️В этом примере конструктор класса MyClass
объявлен как explicit
, поэтому он не может использоваться для неявного преобразования значения int
в объект класса MyClass
. Попытка сделать это вызывает ошибку компиляции. Однако вы все еще можете использовать конструктор для явного преобразования значения int
в объект класса MyClass
, как показано в строке с объявлением переменной b
.
#cpp #programming
👉 @cpp_lib
Хотите изучить C++ с нуля или задумываетесь о переходе на него?
Ждём вас на открытом практическом уроке «Функции, стек и рекурсия в C++» от OTUS, где мы:
- поговорим о том, как реализован вызов функции;
- узнаем, что из себя представляет стек и как он задействован в этом процессе;
- обсудим способы передачи параметров в функцию в C++ и поймем, почему их так много;
- познакомимся с рекурсивными функциями, решая классическую задачу о Ханойских башнях;
- узнаем, почему обычно стоит избегать активного использования рекурсии.
Спикер Андрей Рыжиков — опытный разработчик в НИИ обработки аэрокосмических изображений.
⏰ Встречаемся 4 июня в 20:00 мск в преддверии старта курса «Специализация C++ Developer». Все участники вебинара получат специальную цену на обучение и консультацию от менеджеров OTUS!
➡ Регистрируйтесь прямо сейчас, чтобы не пропустить бесплатный урок.
Крупнейший образовательный центр «Алабуга Политех» приглашает освоить профиль «Аэронавигация и программирование БПЛА» для выпускников 9-11 классов Обучение проходить по дуальной системе:✈️
работа + обучение в колледже.
✅ бесплатное обучение
✅ зарплата до 160 000 рублей
✅ проживание в современных ЖКС
Студенты официально трудоустраиваются и оттачивают свои навыки на высокотехнологичном производстве под руководством опытных инженеров-наставников.
✅ Подавай заявку на поступление в «Алабуга Политех».
Simple Term Colors
Библиотека C++17 для работы с цветами в терминале. С поддержкой RGB и HSL!
https://github.com/illyigan/simple_term_colors
#cpp #programming
👉 @cpp_lib
Структурированная диагностика в новом окне сведений о проблеме
Многочисленные ошибки компилятора, в которых, кажется, невозможно разобраться, - бич многих разработчиков C++. Инструменты должны предоставлять лучший опыт, чтобы помочь вам понять диагностику и понять, как исправить корень проблемы.
https://devblogs.microsoft.com/cppblog/structured-diagnostics-in-the-new-problem-details-window/
#cpp #programming
👉 @cpp_lib