Библиотека C/C++ разработчика
Open in Telegram
Полезные материалы по всему, что может быть полезно плюсовику/сишнику. По всем вопросам @evgenycarter
Show more7 213
Subscribers
-224 hours
-47 days
-3230 days
Posts Archive
Удобный способ работы с перечислениями в C++ — приведение
enum к строке и обратно.
Во многих проектах используется enum, чтобы задать ограниченный набор значений. Но как вывести значение enum в лог? Или, наоборот, прочитать из строки и получить нужное значение enum?
C++ сам по себе не умеет конвертировать enum в строку и обратно. Вот простая реализация этого функционала через std::unordered_map:
enum class LogLevel {
Debug,
Info,
Warning,
Error
};
const std::unordered_map<LogLevel, std::string> LogLevelToString = {
{LogLevel::Debug, "Debug"},
{LogLevel::Info, "Info"},
{LogLevel::Warning, "Warning"},
{LogLevel::Error, "Error"},
};
const std::unordered_map<std::string, LogLevel> StringToLogLevel = {
{"Debug", LogLevel::Debug},
{"Info", LogLevel::Info},
{"Warning", LogLevel::Warning},
{"Error", LogLevel::Error},
};
std::string to_string(LogLevel level) {
return LogLevelToString.at(level);
}
LogLevel to_log_level(const std::string& str) {
return StringToLogLevel.at(str);
}
Такой подход хорошо работает, если enum не слишком большой. Если значений много — можно автоматизировать генерацию через макросы или использовать библиотеки вроде magic_enum.
📲 Мы в MAX
#cpp #programming
👉 @cpp_libЛаконичный макрос defer для C++17
Ручное управление ресурсами в низкоуровневом си-подобном коде на C++ — довольно хлопотное занятие. Создание достойных RAII-врапперов для каждого используемого сишного API не всегда практично, а использование подходов с goto cleanup или множеством вложенных if (success) вредит читаемости кода.
Макрос defer как никогда кстати! Отложенная лямбда будет выполнена при выходе из области видимости, независимо от того, будет ли выполнен return, брошено исключение, или даже выполнен goto наружу. Данный макрос по-настоящему zero-cost и не зависит от рантайма C или стандартной библиотеки, поэтому его можно использовать даже в разработке под ядро ОС.
https://habr.com/ru/articles/916732/
📲 Мы в MAX
#cpp #programming
👉 @cpp_lib
Низкоуровневый скриптинг на C++ для игровых движков
Я постарался охватить только основы, но текст всё равно получился очень длинным.
libriscv — это зрелый эмулятор RISC-V, который в настоящее время используется в игровых движках. Насколько мне известно, это единственный эмулятор, в котором основной акцент делается на обработке задержек, а также предоставляются специализированные решения и инструменты для выполнения быстрых вызовов при обращении с функциями — как входящих, так и исходящих. Причём, всё это заключено в безопасной песочнице. Задержки, наблюдаемые в libriscv, гораздо ниже, чем в эталонных эмуляторах.
Меня многие спрашивали, как им пользоваться, но здесь интереснее то, как вообще может прийти в голову мысль писать скрипты на C++ — не слишком ли сложно это будет? Оказывается, нет, не очень. Вот уже несколько лет я пишу на C++ скрипты для одной большой и одной не очень большой игры, и меня почти не посещало ощущение, что виной каким-то возникающим при этом проблемам являются язык C++ или связанные с ним скриптовые API. Я много лет программирую на Lua, а до этого пользовался обычным C. Но сейчас современный идиоматический C++ — то, что мне нужно. Причём, я могу писать на этом языке как в самом игровом движке, так и за его пределами, при этом опираясь (буквально) на одни и те же абстракции и оперируя одинаковыми структурами данных. Наконец, C++ просто очень мощный. Правда, я признаю, что о вкусах не спорят, и при работе с C++ также не обойтись без компромиссов.
https://habr.com/ru/articles/919620/
📲 Мы в MAX
#cpp #programming
👉 @cpp_lib
Пишем игру для игровой ретро-консоли Anbernic на C++
Дисклеймер
Сразу скажу, что почти всё, что описано в этой статье, я делал первый раз в жизни, поэтому я не мог не совершить ошибок. Некоторые мои решения и заявления могут быть некорректными. Воспринимать эту статью как туториал можно только на свой страх и риск. Для нормального восприятия этой статьи вы должны обладать базовыми навыками программирования на C++ и хотя бы общим представлением о том, что из себя представляет операционная система Linux.
Как всё начиналось
Не так давно ко мне в руки попала игровая консоль Anbernic RG35XX SP. Это портативная игровая консоль на базе четырёхъядерного процессора Allwinner H700 с ядрами Cortex-A53, которая имеет на борту операционную систему OFW (дистрибутив Linux, основанный на Ubuntu). Консоль предназначена для запуска ретро игр на эмуляторе Retroarch. Этот эмулятор поддерживает эмуляцию множества популярных игровых консолей 90х и 2000х и позволяет запускать ТЫСЯЧИ популярных игр, которые можно устанавливать на SD карточку.
https://habr.com/ru/articles/897338/
📲 Мы в MAX
#cpp #programming
👉 @cpp_lib
Руководство по сборке Qt под Windows из исходников с MinGW
Официальный способ установки готовых бинарников Qt - через онлайн инсталлятор. Однако он требует обязательной регистрации. Да еще и недоступен на территории РФ. Есть и другие способы получить бинарники, или собрать с компилятором от Microsoft, однако не всегда эти способы приемлемы. Сборка из исходников под Windows может оказаться несколько нетривиальна для новичков, потому сделал небольшую инструкцию по сборке Qt 5 и Qt 6. А так же рассмотрена базовая настройка QT Creator.
https://habr.com/ru/articles/917252/
📲 Мы в MAX
#cpp #programming
👉 @cpp_lib
Опенсорс от кристалла до программного стека
Нужны ли нам открытые архитектуры? Что нам нужно, чтобы они работали? В этом докладе мы попытаемся изложить основные проблемы и преимущества открытых архитектур на примере RISC-V — и расскажем про то, как происходит разработка различных инструментов, включая генераторы, компиляторы, средства бенчмаркинга.
00:00 Введение. Архитектура RISC-V, открытая и расширяемая (sigh).
05:38 Стадии конвейера и интерфейсы.
13:37 Открытые ядра на базе RISC-V, тестовое окружение и проблема верификации
19:14 Компиляторные технологии и LLVM
24:46 Моделирование и верификация RISC-V на разных уровнях и llvm-snippy
29:17 Задача бенчмаркинга и llvm-exegesis
34:24 Проблема высокоуровневого ПО, профили и развитие экосистемы
41:15 Ответы на вопросы
источник
📲 Мы в MAX
#cpp #programming
👉 @cpp_lib
Проектируем змейку под учебный RISC-V микроконтроллер
На третьем курсе некоторые направления в МИЭТ проходят лабораторный практикум, на котором им даётся возможность спроектировать собственную систему архитектуры RISC-V и написать под неё программу на С или C++.
В качестве затравки и повышения мотивации, хотелось показать им на что будет способна их процессорная система, и для этого было решено написать какую-нибудь простенькую игру, не требующую особых требований к ресурсам и графике. Так выбор пал на Змейку.
В этой я расскажу о том, как была написана данная игра под платформу, поддерживающую символьный вывод.
https://habr.com/ru/articles/915450/
📲 Мы в MAX
#cpp #programming
👉 @cpp_lib
Game++. Performance traps
Стандартная библиотека C++ содержит множество классов и функций, которые легко интегрируются в проект, безопасны и протестированы на множестве кейсов. Однако за удобность и всеядность приходится платить производительностью. В играх, если производительность сразу не стоит на первом месте, то к концу проекта вы получаете такой технический долг, что проще бывает всё выкинуть и начать заново. Прямолинейное использование стандартной библиотеки в большинстве случаев, когда нужен производительный и эффективный код, я сейчас не только про игры, оказывается не лучшим выбором.
Примеры ниже завершают серию статей, в которой я постарался собрать интересные моменты использования разных структур данных, используемых при разработке игр, их расширений и возможностей для улучшения.
Статья рассчитана на читателей, которые не являются гуру C++ или знатоками тонкостей языка, но в целом знакомы с языком и его идеями, хотя знание ассемблера x86 не требуется, я буду прикладывать ссылки на примеры кода quickbench, чтобы объяснить, почему даю те или иные советы.
Иногда я тут буду ужасы рассказывать, но большинство этих случаев мешало нормальной работе игр в проде, так что пришлось относиться к ним с уважением.
https://habr.com/ru/articles/912926/
#cpp #programming
📲 Мы в MAX
#cpp #programming
👉 @cpp_lib
Визуализация быстрой сортировки с SFML и C++20
В этой статье мы создадим интерактивную визуализацию алгоритма быстрой сортировки (QuickSort) с использованием библиотеки SFML и современных возможностей C++20. Этот проект поможет вам лучше понять, как работает один из самых популярных алгоритмов сортировки, и покажет, как можно комбинировать графику и алгоритмы для создания образовательных инструментов.
https://habr.com/ru/articles/889188/
📲 Мы в MAX
#cpp #programming
👉 @cpp_lib
Любителям x86-64 assembler посвящается: DIY волокна в C++
Нас ждёт мозговыносящая смесь 64/32-битного ассемблера и старого-доброго C++. Мы сделаем собственную реализацию... Волокон (fibers) без вызова Win API и звонков в службу спасения.
https://habr.com/ru/articles/908406/
📲 Мы в MAX
#cpp #programming
👉 @cpp_lib
Как я написал эмулятор Nintendo Gameboy на C++ за две недели
Расскажу, как устроена архитектура консоли Nintendo Gameboy, как можно эмулировать её основные компоненты, какие решения я принимал в процессе разработки и какие инструменты использовал.
В свободное время, (прим., во время отпуска) я бывает берусь за какие-нибудь небольшие проекты не связанные с моей основной деятельностью. В этот раз решил создать эмулятор консоли. Вопреки моде на Rust, взял проверенный годами C++. Эмуляция — непростая задача. Производители редко публикуют полные спецификации аппаратной части, поэтому сообщество занимается восстановлением поведения системы по косвенным признакам и тестированию. Полное решение таких задач требует больше времени, чем пара недель отпуска. В условиях жестких временных рамок, желания получить быстрый результат я остановился на эмуляции Nintento Gameboy. Активное сообщество, популярность и долгая жизнь консоли привели к появлению огромного количества открытых ресурсов, которые делают возможным получить быстрый и наглядный результат. Например, на archive.org доступно руководство разработчика (GameBoyProgManVer1.1), а поиск по Github даёт более 8000 репозиториев, так или иначе связанных с данной консолью.
https://habr.com/ru/articles/908752/
📲 Мы в MAX
#cpp #programming
👉 @cpp_lib
🚀 Подборка полезных IT каналов в Max
Системное администрирование, DevOps 📌
https://max.ru/i_odmin Все для системного администратора
https://max.ru/bash_srv Bash Советы
https://max.ru/sysadminof Книги для админов, полезные материалы
https://max.ru/i_odmin_book Библиотека Системного Администратора
https://max.ru/i_devops DevOps: Пишем о Docker, Kubernetes и др.
https://max.ru/tipsysdmin Типичный Сисадмин
https://max.ru/channel_win_sysadmin Системный Администратор Windows
https://max.ru/channel_linux_admin Linux: Системный администратор
https://max.ru/channel_linuxmod Linux
https://max.ru/channel_i_linux Системный администратор
https://max.ru/channel_devopslib DevOps, SRE, Sysadmin
https://max.ru/channel_devops_star DevOps Star (Звезда Девопса)
Excel лайфхак 📌
https://t.me/Excel_lifehack Excel лайфхак
Английский с нуля 🇬🇧
https://max.ru/UchuEnglish
1C разработка 📌
https://max.ru/odin1c_rus Cтатьи, курсы, советы, шаблоны кода 1С
https://max.ru/channel_DevLab1C 1С:Предприятие 8
Программирование C++📌
https://max.ru/cpp_lib Библиотека C/C++ разработчика
https://max.ru/channel_cpp_geek C++ geek
Программирование Go📌
https://max.ru/golang_lib Библиотека Go (Golang) разработчика
Программирование React📌
https://max.ru/react_lib React
Программирование Rust📌
https://max.ru/channel_rust_lib
Программирование Python 📌
https://max.ru/python_of Python академия.
https://max.ru/BookPython Библиотека Python разработчика
Java разработка 📌
https://max.ru/bookjava Библиотека Java разработчика
https://max.ru/channel_java_geek Java Geek
GitHub Сообщество 📌
https://max.ru/githublib Интересное из GitHub
Базы данных (Data Base) 📌
https://max.ru/database_info Все про базы данных
Фронтенд разработка 📌
https://max.ru/frontend_1 Подборки для frontend разработчиков
Библиотеки 📌
https://max.ru/programmist_of Книги по программированию
https://max.ru/proglb Библиотека программиста
https://max.ru/bfbook Книги для программистов
Программирование 📌
https://max.ru/bookflow Лекции, видеоуроки, доклады с IT конференций
https://max.ru/itmozg Программисты, дизайнеры, новости из мира IT
https://max.ru/php_lib Библиотека PHP программиста 👨🏼💻👩💻
Шутки программистов 📌
https://max.ru/itumor Шутки программистов
Защита, взлом, безопасность 📌
https://max.ru/thehaking Канал о кибербезопасности
https://max.ru/xakkep_1 Хакер Free
Книги, статьи для дизайнеров 📌
https://max.ru/odesigners Статьи, книги для дизайнеров
Математика 📌
https://max.ru/Pomatematike Канал по математике
https://max.ru/phismat_1 Обучающие видео, книги по Физике и Математике
Вакансии в IT📌
https://max.ru/progjob
https://max.ru/channel_rabotait
Мир технологий 📌
https://max.ru/mir_teh Канал для любознательных
Городские📌
https://max.ru/piterspb_78 Свежие новости Санкт-Петербурга
https://max.ru/mockva_life Свежие новости Москвы
https://max.ru/piterspb Питер Новости: Санкт-Петербург / СПБ / ДТП
https://max.ru/channel_krasnodar_novosty Краснодар Новости
https://max.ru/channel_novosibirsk_novosti Новосибирск
https://max.ru/channel_samara_novosti Новости Самары
https://max.ru/channel_ekaterinburg_novosti Новости Екатеринбурга
https://max.ru/channel_kazan_novosti Новости Казани
https://max.ru/channel_omsk_novosti Новости Омска
https://max.ru/channel_moskva_24 Москва 24
Генерация лабиринтов: алгоритм Эллера
Сегодня я хотел бы рассказать о генерации идеального лабиринта — алгоритмом Эллера. Статья подойдёт всем любителям алгоритмов»
https://habr.com/ru/articles/667576/
📲 Мы в MAX
#cpp #programming
👉 @cpp_lib
ggwave — это компактная и переносимая библиотека C/C++ для передачи и приема коротких сообщений с использованием звуковых волн.
Она позволяет устройствам обмениваться данными через звук — без необходимости в Bluetooth, Wi-Fi или других беспроводных технологиях. Это особенно полезно для коротких одноразовых взаимодействий между устройствами, которые находятся рядом друг с другом.
Поддерживает:
* Передачу текста через звук
* Возможность генерации и анализа аудиосигналов в реальном времени
* Кроссплатформенность: работает на Windows, macOS, Linux, iOS, Android и в браузере (через WebAssembly)
Примеры использования:
* Аутентификация устройств поблизости
* Обмен контактами или ссылками
* Синхронизация устройств без интернета
https://github.com/ggerganov/ggwave
📲 Мы в MAX
#cpp #programming
👉 @cpp_lib
💻 АЦП в ESP32. Оцифровать сигнал, а не "погоду на Марсе". Нюансы, особенности, повышение точности
Приглашаем на открытый урок.
🗓 24 августа в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Embedded-разработчик».
Мы рассмотрим весь пусть сигнала - от датчика до его цифровой формы в микроконтроллере ESP32. Вспомним основные параметры, погрешности АЦП, увидим их влияние "вживую", узнаем, почему иногда теоремы Котельникова недостаточно и что с этим делать? Поговорим о важности источника опорного напряжения, произведем расчет бюджета погрешностей тракта АЦП.
Применим калибровку и сравним результаты до\после на АЦП, после чего рассмотрим простые методы фильтрации исходно зашумленных сигналов.
Вебинар будет полезен: радиолюбителям, начинающим разработчикам электроники, инженерам-схемотехникам, разработчикам встраиваемого программного обеспечения
В результате вебинара слушатели узнают:
✔️ все основные параметры АЦП и смогут увидеть их влияние вживую на примере ESP32
✔️ особенности и нюансы схемотехники при проектировании тракта АЦП
✔️ что такое "алиасинг" и как его избежать
✔️ как провести обобщенный расчет погрешностей тракта АЦП
✔️ как откалибровать АЦП в ESP32
✔️ простые методы фильтрации зашумленных сигналов
🔗 Ссылка на регистрацию: https://vk.cc/d0zMbG
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Этот проект содержит исходный код игр Command & Conquer: Tiberian Dawn и Command & Conquer: Red Alert, выпущенных как часть сборника Command & Conquer Remastered Collection.
Код распространяется под лицензией GPL v3 и предоставляет возможность энтузиастам и разработчикам модифицировать, изучать и использовать движок в рамках условий лицензии. В проекте используется C++ и множество современных практик разработки, а также система сборки CMake.
Репозиторий включает:
* Исходный код движка на C++
* Документацию по сборке
* Скрипты для интеграции с игрой
* Исторический контекст разработки
Проект ориентирован на обучение, поддержку моддинга и развитие сообщества вокруг классических RTS-игр.
https://github.com/electronicarts/CnC_Remastered_Collection
📲 Мы в MAX
#cpp #programming
👉 @cpp_lib
Пишем на С++ вектор, умеющий расширяться без копирования элементов
В языке С есть функции malloc, free и realloc. При использовании последней вы можете написать этакий расширяющийся массив из примитивных типов или структур (классов-то нет), который, можно надеяться, не будет копировать все данные при каждом расширении. В С++ есть встроенный класс vector, который представляет из себя расширяющийся массив, но он так не умеет: при каждом расширении вектора выделяется новый участок памяти и все элементы перемещаются на него (по возможности, с использованием move-семантики). Но ведь, если можно каждый раз не копировать все старые элементы на новое место, вектор должен работать быстрее? В этой статье я попробую написать вектор, который умеет расширяться без копирования элементов.
Сначала я покажу, что стандартный вектор не умеет расширяться без копирования/перемещения, потом обсужу придуманное решение, потом собственно приведу реализацию вектора, а в конце сравню производительность со стандартным вектором.
https://habr.com/ru/post/701784/
📲 Мы в MAX
#cpp #programming
👉 @cpp_lib
🚀 CUTE_HEADERS - Коллекция кроссплатформенных однофайловых библиотек на C/C++ без зависимостей, в основном используемых для разработки игр.
🔹 Математика (векторы, матрицы)
🔹 Системы частиц
🔹 Аудио и таймеры
🔹 Работа с файлами
🔹 Простая физика и коллизии
🔹 Анимация и графика
🔹 И многое другое!
Все библиотеки — в одном .h файле, без зависимостей. Отлично подходят для маленьких проектов, прототипов и учебных задач.
https://github.com/RandyGaul/cute_headers
📲 Мы в MAX
#cpp #programming
👉 @cpp_lib
Линус Торвальдс: Критика C++ — Комплексный анализ
Линус Торвальдс, создатель (и великодушный диктатор) Linux, всегда с особой критикой относился к C++, объясняя почему он отвергает его в разработке ядра Linux. Но он не просто резко высказывается против использования C++, а приводит ряд аргументов, которые мы с вами сегодня и рассмотрим.
В чем причина неприятия C++? Давайте рассмотрим аргументы, которые Линус приводит против его использования.
C и C++ очень похожи друг на друга, но все‑таки это не одно и то же. C++ является объектно‑ориентированной версией C. Некоторые даже называют его преемником C. Однако C++ представляет из себя скорее расширение языка C, нежели его полноценную замену. Он добавляет такие функции, как объекты, конструкторы, деструкторы, шаблоны, обработка исключений, пространства имен и перегрузка операторов. Эти расширения приносят с собой свои собственные парадигмы и проблемы. Неудивительно, что все технические аргументы Линуса против C++ связаны именно с этими расширениями.
https://habr.com/ru/companies/otus/articles/902724/
original https://medium.com/@jankammerath/linus-torvalds-critique-of-c-a-comprehensive-review-ea8374084abf
📲 Мы в MAX
#cpp #programming
👉 @cpp_lib
