ch
Feedback
Библиотека C/C++ разработчика

Библиотека C/C++ разработчика

前往频道在 Telegram

Полезные материалы по всему, что может быть полезно плюсовику/сишнику. По всем вопросам @evgenycarter

显示更多
7 223
订阅者
-324 小时
-227
-4630
帖子存档
Constexpr — компилируем код на этапе сборки Сегодня хотел еще поговорть про constexpr и как он помогает делать код быстрее за счёт вычислений на этапе компиляции. Что делает constexpr? Если функция объявлена с constexpr, то компилятор попытается выполнить её во время компиляции, если это возможно. Простой пример:

constexpr int square(int x) {
    return x * x;
}
  
Теперь, если мы напишем:

int val = square(5);
  
То компилятор подставит 25 прямо в код, и вычисление не будет выполняться во время выполнения программы! Более сложный пример: Представьте, что у нас есть факториал:

constexpr int factorial(int n) {
    return (n <= 1) ? 1 : (n * factorial(n - 1));
}
  
Теперь вызов factorial(5) будет заменён на 120 ещё до запуска программы. 📌 Итог: constexpr помогает убирать лишние вычисления из рантайма, делая код быстрее. А вы используете constexpr? Делитесь своими кейсами! 🚀 #cpp #programming 👉 @cpp_lib

🎯 Ошибки в коде на C++ — враг номер один? Мы научим их побеждать! Приходите на открытый урок «Отладка в C++: место в жизненн
🎯 Ошибки в коде на C++ — враг номер один? Мы научим их побеждать! Приходите на открытый урок «Отладка в C++: место в жизненном цикле разработки». Разберём работу с GDB, поиск утечек памяти, неопределённое поведение и многое другое. Хотите писать код, который работает без сюрпризов? Мы покажем, как использовать отладку, чтобы ошибки боялись вас. 🗓 Урок пройдёт 12 февраля в 20:00 мск. 👉 Регистрируйтесь сейчас и получите скидку на большое обучение на курсе «C++ Developer. Professional»: https://vk.cc/cIfoXL Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Оптимизация кода с помощью std::string_view Привет, друзья! Сегодня разберём полезную штуку для работы со строками — std::string_view. Если ваш код активно использует std::string, но вам нужно просто просматривать данные без ненужных аллокаций и копирований, то std::string_view — это то, что нужно! Пример проблемы:

std::string extract_extension(const std::string& filename) {
    size_t pos = filename.rfind('.');
    if (pos == std::string::npos) return "";
    return filename.substr(pos);
}
  
Казалось бы, код работает, но есть нюанс: substr(pos) создаёт новую строку, что лишний раз тратит память. Оптимизированный вариант:

std::string_view extract_extension(std::string_view filename) {
    size_t pos = filename.rfind('.');
    if (pos == std::string_view::npos) return {};
    return filename.substr(pos);
}
  
Здесь std::string_view просто создаёт представление на часть строки без копирования данных. 🔥 Итог: код стал быстрее и экономичнее! Используйте std::string_view, когда вам не нужно владение строкой. Что думаете? Используете std::string_view в своём коде? Делитесь в комментариях! 🔥 #cpp #programming 👉 @cpp_lib

🚀В этой статье рассматривается минималистичная реализация виртуальной машины (VM) на C, занимающая менее 125 строк кода! 🖥️ Основная идея — эмуляция простого процессора с регистровой архитектурой. Виртуальная машина поддерживает базовые операции, такие как загрузка значений в регистры, сложение, умножение и выполнение условных переходов. 🔹 Основные компоненты: - Регистры (массив для хранения значений) - Память (байтовый массив, хранящий инструкции и данные) - Исполнительный цикл (разбор и выполнение инструкций) 🔹 Пример кода: Основная идея заключается в том, чтобы хранить наши инструкции в массиве (uint16_t program[]), а затем использовать функцию fwrite() для создания бинарного файла, который мы в дальнейшем сможем загрузить с помощью ld_img().

#include <stdio.h>
#include <stdlib.h>

uint16_t program[] = {
    /*mem[0x3000]=*/    0xF026,    //  1111 0000 0010 0110             TRAP trp_in_u16  ;read an uint16_t from stdin and put it in R0
    /*mem[0x3002]=*/    0x1220,    //  0001 0010 0010 0000             ADD R1,R0,x0     ;add contents of R0 to R1
    /*mem[0x3003]=*/    0xF026,    //  1111 0000 0010 0110             TRAP trp_in_u16  ;read an uint16_t from stdin and put it in R0
    /*mem[0x3004]=*/    0x1240,    //  0001 0010 0010 0000             ADD R1,R1,R0     ;add contents of R0 to R1
    /*mem[0x3006]=*/    0x1060,    //  0001 0000 0110 0000             ADD R0,R1,x0     ;add contents of R1 to R0
    /*mem[0x3007]=*/    0xF027,    //  1111 0000 0010 0111             TRAP trp_out_u16;show the contents of R0 to stdout
    /*mem[0x3006]=*/    0xF025,    //  1111 0000 0010 0101             HALT             ;halt
};

int main(int argc, char** argv) {
    char *outf = "sum.obj";
    FILE *f = fopen(outf, "wb");
    if (NULL==f) {
        fprintf(stderr, "Cannot write to file %s\n", outf);
    }
    size_t writ = fwrite(program, sizeof(uint16_t), sizeof(program), f);
    fprintf(stdout, "Written size_t=%lu to file %s\n", writ, outf);
    fclose(f);
    return 0;
}
https://www.andreinc.net/2021/12/01/writing-a-simple-vm-in-less-than-125-lines-of-c #cpp #programming 👉 @cpp_lib

Подборка Telegram каналов для программистов Системное администрирование 📌 https://t.me/sysadmin_girl Девочка Сисадмин https://t.me/srv_admin_linux Админские угодья https://t.me/linux_srv Типичный Сисадмин https://t.me/linux_odmin Linux: Системный администратор https://t.me/devops_star DevOps Star (Звезда Девопса) https://t.me/i_linux Системный администратор https://t.me/linuxchmod Linux https://t.me/sys_adminos Системный Администратор https://t.me/tipsysdmin Типичный Сисадмин (фото железа, было/стало) https://t.me/sysadminof Книги для админов, полезные материалы https://t.me/i_odmin Все для системного администратора https://t.me/i_odmin_book Библиотека Системного Администратора https://t.me/i_odmin_chat Чат системных администраторов https://t.me/i_DevOps DevOps: Пишем о Docker, Kubernetes и др. https://t.me/sysadminoff Новости Линукс Linux 1C разработка 📌 https://t.me/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С Программирование C++📌 https://t.me/cpp_lib Библиотека C/C++ разработчика https://t.me/cpp_knigi Книги для программистов C/C++ https://t.me/cpp_geek Учим C/C++ на примерах Программирование Python 📌 https://t.me/pythonofff Python академия. Учи Python быстро и легко🐍 https://t.me/BookPython Библиотека Python разработчика https://t.me/python_real Python подборки на русском и английском https://t.me/python_360 Книги по Python Rus Java разработка 📌 https://t.me/BookJava Библиотека Java разработчика https://t.me/java_360 Книги по Java Rus https://t.me/java_geek Учим Java на примерах GitHub Сообщество 📌 https://t.me/Githublib Интересное из GitHub Базы данных (Data Base) 📌 https://t.me/database_info Все про базы данных Мобильная разработка: iOS, Android 📌 https://t.me/developer_mobila Мобильная разработка https://t.me/kotlin_lib Подборки полезного материала по Kotlin Фронтенд разработка 📌 https://t.me/frontend_1 Подборки для frontend разработчиков https://t.me/frontend_sovet Frontend советы, примеры и практика! https://t.me/React_lib Подборки по React js и все что с ним связано Разработка игр 📌 https://t.me/game_devv Все о разработке игр Библиотеки 📌 https://t.me/book_for_dev Книги для программистов Rus https://t.me/programmist_of Книги по программированию https://t.me/proglb Библиотека программиста https://t.me/bfbook Книги для программистов https://t.me/books_reserv Книги для программистов БигДата, машинное обучение 📌 https://t.me/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning Программирование 📌 https://t.me/bookflow Лекции, видеоуроки, доклады с IT конференций https://t.me/coddy_academy Полезные советы по программированию https://t.me/rust_lib Полезный контент по программированию на Rust https://t.me/golang_lib Библиотека Go (Golang) разработчика https://t.me/itmozg Программисты, дизайнеры, новости из мира IT https://t.me/php_lib Библиотека PHP программиста 👨🏼‍💻👩‍💻 https://t.me/nodejs_lib Подборки по Node js и все что с ним связано https://t.me/ruby_lib Библиотека Ruby программиста QA, тестирование 📌 https://t.me/testlab_qa Библиотека тестировщика Шутки программистов 📌 https://t.me/itumor Шутки программистов Защита, взлом, безопасность 📌 https://t.me/thehaking Канал о кибербезопасности https://t.me/xakep_1 Статьи из "Хакера" Книги, статьи для дизайнеров 📌 https://t.me/ux_web Статьи, книги для дизайнеров Английский 📌 https://t.me/UchuEnglish Английский с нуля Математика 📌 https://t.me/Pomatematike Канал по математике https://t.me/phis_mat Обучающие видео, книги по Физике и Математике Excel лайфхак📌 https://t.me/Excel_lifehack https://t.me/tikon_1 Новости высоких технологий, науки и техники💡 https://t.me/mir_teh Мир технологий (Technology World) Вакансии 📌 https://t.me/sysadmin_rabota Системный Администратор https://t.me/progjob Вакансии в IT

Крошечный рендерер или как работает OpenGL: программный рендеринг в 500 строках кода https://github.com/ssloy/tinyrenderer/wi
+3
Крошечный рендерер или как работает OpenGL: программный рендеринг в 500 строках кода https://github.com/ssloy/tinyrenderer/wiki #cpp #programming 👉 @cpp_lib

#вакансия #удалённо #parttime #remote #parttime #C++ #преподаватель 🦉  OTUS ищет преподавателей на онлайн-курсы: С++ Developer Basic С++ Developer Professional Мы расширяем команду экспертов (уже более 600 человек). Преподавательский опыт не обязателен — мы научим вас всему, что нужно! Требуется: - Знание С++17, STL, ООП, Git, опыт коммерческой разработки на C++ от 3 лет, понимание RAII, SOLID, SFINAE. Опыт многопоточного и асинхронного программирования. Обязанности: - подготовиться к занятиям (темы на выбор, материалы предоставляются) - преподавать в mts-link.ru, уделяя большое внимание практике. Здесь вы сможете развивать навыки публичных выступлений, работы с аудиторией и подачи обратной связи. Условия: ✅ гибкий график, легко совмещать с основной работой, занятия в вечернее время; ✅  оплата от 4000 до 6000 руб. за 1,5 часа занятия; ✅ бонусы: доступ к нашим курсам, нетворкинг, развитие личного бренда, бесплатные воркшопы и конференции для наших преподавателей. Обсудить подробнее: @candyfox24

+9
Практика языка C, 2023-2024 Семинар 1.1. Алгоритм Евклида. Семинар 1.2. Системы счисления. Семинар 1.3. Числа Фибоначчи. Допсеминар: unix shell Семинар 2.1. Простые числа. Семинар 2.2. Побитовые вычисления. Семинар 2.3. Время и случайность. Углубление пройденного: логическая память и виртуальная память. Семинар 3.1. Линейный поиск и простые сортировки. Семинар 3.2. Стратегия "разделяй и властвуй". источник #cpp #programming 👉 @cpp_lib

Поговорим об observability на Яндекс Infra Meetup #4 Приглашаем на митап про наблюдаемость приложений от Яндекс Go и Техплатф
Поговорим об observability на Яндекс Infra Meetup #4 Приглашаем на митап про наблюдаемость приложений от Яндекс Go и Техплатформы Екома и Райдтеха Яндекса. В программе два трека, выбрать можно любой:  CaseLab: observability. Интерактивный формат решения практических задач совместно с модераторами.  CaseStudy. 3 доклада от спикеров сервисов:  — Толя Беляев расскажет про варианты сбора метрик приложения микросервисной архитектуры — Леша Королев объяснит, как построить дашборд всей платформы Такси — Леша Золотухин покажет, как создать диагностические дашборды в инфраструктуре на 2000+ микросервисов После CaseLab и докладов — нетворкинг в неформальной атмосфере и афтепати. 13 февраля, 18:30 Москва, офлайн  Успейте зарегистрироваться и зовите коллег!   Обратите внимание, количество мест ограничено. После регистрации обязательно дождитесь подтверждения заявки.

Пишем легаси с нуля на С++, не вызывая подозрение у санитаров. 05 — GDI рендер В данной статье опишу реализацию GDI рендера д
Пишем легаси с нуля на С++, не вызывая подозрение у санитаров. 05 — GDI рендер В данной статье опишу реализацию GDI рендера для Windows. Узнаем как программировали деды под windows в середине 1990-ых. И наконец создадим функциональный рендер, с возможностью рисовать все типы изображений. Часть 1 Часть 2 Часть 3 Часть 4 https://habr.com/ru/articles/877542/ #cpp #programming 👉 @cpp_lib

Perforator узнает, где тормозит ваш код На GitHub выложили код системы непрерывного профилирования, которую Яндекс использует
Perforator узнает, где тормозит ваш код На GitHub выложили код системы непрерывного профилирования, которую Яндекс использует для анализа производительности большинства своих сервисов. Perforator поддерживает: 🔹 Нативные языки: C++, C, Go, Rust 🔹Экспериментально: Python и Java Его можно развёртывать на: 🔹 Kubernetes 🔹 Локально Perforator обеспечивает высокую точность профилей с минимальным оверхедом, рисует быстрые флеймграфы и умеет оптимизировать программы на основе прошлых версий. Уже сейчас Perforator можно скачать и протестировать самостоятельно. Исходный код доступен под лицензией MIT (и GPL для eBPF-программ) и запускается под x86-64 Linux. Визуализацию работы сервиса нашел здесь. статья #cpp #programming 👉 @cpp_lib

Пишем легаси с нуля на С++, не вызывая подозрение у санитаров. 04 — Компиляторная археология Пишем легаси с нуля на С++, не в
Пишем легаси с нуля на С++, не вызывая подозрение у санитаров. 04 — Компиляторная археология Пишем легаси с нуля на С++, не вызывая подозрение у санитаров. 04 — Компиляторная археология В данной статье затронем частичку компиляторной истории. И постараемся собрать проект под компилятор 1995 года. Вы спросите, но зачем? Я отвечу: Потому, что можем! Часть 1 Часть 2 Часть 3 https://habr.com/ru/articles/876272/ #cpp #programming 👉 @cpp_lib

Автоматическая Генерация Конфигураций для Make Сборок При разработке программного обеспечения (особенно для микроконтроллеров
Автоматическая Генерация Конфигураций для Make Сборок При разработке программного обеспечения (особенно для микроконтроллеров) рано или поздно придется столкнуться с тем, что надо как-то передавать конфигурации для данного программного проекта. В своем опыте я пришел к выводу, что с точки зрения масштабирования кодовой базы, конфиги проще всего передавать через переменные окружения. Да.. Плюс в том, что переменные окружения можно определять прописывая прямо в скриптах (Make, CMake и т.п.). Выглядит это так. У каждой сборки есть файл config.mk в котором перечислены программные компоненты из которых должна собираться эта конкретная сборка. Содержимое этого файла обычно выглядит так. https://habr.com/ru/articles/798213/ #cpp #programming 👉 @cpp_lib

❓Хотите освоить алгоритмы, которые лежат в основе многих IT-решений? Время познакомиться с магией оптимизации! На открытом ур
❓Хотите освоить алгоритмы, которые лежат в основе многих IT-решений? Время познакомиться с магией оптимизации! На открытом уроке «Поиск кратчайшего пути во взвешенном графе» мы разберём алгоритм Дейкстры: от теории до практической реализации. Узнайте, как находить решения быстрее, надёжнее и эффективнее. Алгоритмы — это как GPS для программирования. После урока вы сможете уверенно строить маршруты в графах, прокачаете свои навыки и сделаете шаг к профессиональному уровню. ⏰ Встречаемся 3 февраля в 20:00 мск, участники получат скидку на большое обучение «Алгоритмы и структуры данных». 👉 Регистрация открыта: https://vk.cc/cI0Gv4 Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

+6
C++: Эмулятор NES с нуля #1: Bitwise Basics & Overview #2: The CPU (6502 Implementation) #3: Buses, RAMs, ROMs & Mappers #4: PPU - Background Rendering #5: PPU - Foreground Rendering #6: APU - Sounds, Beeps & Bloops #7: More About Mappers источник #cpp #programming 👉 @cpp_lib

Опасность устарела, неопределенность недопустима: undefined behavior в С++20/23/26 Сергей Талантов В современных стандартах С++ стало меньше UB. Разбираем на конкретных кейсах. — Начиная с С++20 отрицательные целые числа обязательно должны быть представлены в дополнительном коде. Это сокращает количество UB в битовых операциях и не только. — Введение std::ssize, возвращающего знаковый размер контейнеров, уменьшает количество ошибок и UB в циклах. — Расширение времени жизни временных объектов в циклах for, появившееся в С++23, решает неочевидные проблемы. — Казалось бы, мелочь, но инициализация std::string нулевым указателем раньше была UB, a теперь запрещена. — В С++23 появился эксклюзивный режим открытия файла (O_EXCL), что решает проблему гонок (time-of-check to time-of-use). — Будет ли введена арифметика с насыщением в С++26? Некоторые конструкции языка признаются небезопасными и устаревшими, также проходимся по ним: — Осталось ли что-то от volatile? — Можно ли теперь делать неявный захват this по значению в лямбдах? — Какие операции с enum теперь не в почете. источник #cpp #programming 👉 @cpp_lib

🦾Хардкорный тест по языку С++🦾 📌Пройдите тест из 20 вопросов и проверьте, насколько вы готовы к обучению на углубленном ку
🦾Хардкорный тест по языку С++🦾 📌Пройдите тест из 20 вопросов и проверьте, насколько вы готовы к обучению на углубленном курсе «C++ Developer. Professional» от OTUS. Сможете сдать - пройдете на курс по спеццене! ⏰ Время прохождения теста ограничено 30 минут 👉ПРОЙТИ ТЕСТ Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Tensor.h – Лёгкая и удобная библиотека для работы с тензорами на C Если вам нужна простая и эффективная библиотека для работы
Tensor.h – Лёгкая и удобная библиотека для работы с тензорами на C Если вам нужна простая и эффективная библиотека для работы с тензорами в C, обратите внимание на tensor.h. Этот проект предлагает лёгкую в использовании реализацию тензоров с минимальным оверхедом. 🔹 Основные возможности: ✅ Поддержка многомерных тензоров ✅ Простая и понятная API ✅ Поддержка операций над тензорами (сложение, умножение и т. д.) ✅ Небольшой размер кода https://github.com/apoorvnandan/tensor.h #cpp #programming 👉 @cpp_lib

Сборка C++ проектов. CMAKE. Статические, динамические библиотеки. Github actions. GE серии 0:00:00 - Введение 0:01:20 - Статические библиотеки в CMAKE 0:09:22 - Динамические библиотеки в CMAKE 0:17:22 - Создаем таргет тестирования 0:27:24 - Пользовательский интерфейс CMAKE, опции 0:31:08 - Github actions источник #cpp #programming 👉 @cpp_lib

С++ — это настоящий кайфǃ Я хочу, чтобы вы задали себе один вопрос и честно на него ответили. Когда в последний раз вы получа
С++ — это настоящий кайфǃ Я хочу, чтобы вы задали себе один вопрос и честно на него ответили. Когда в последний раз вы получали настоящее удовольствие от программирования? Оглядываясь назад, я понимаю, что не испытывал подобных ощущений, наверное… уже лет десять. Удовольствия у меня не было ни от JavaScript, ни от Python, ни от Ruby или C — ни от чего. Когда я говорю «удовольствие» — я имею в виду ощущения человека, которого во время работы над неким проектом переполняет искренний восторг. Этот человек постоянно ловит себя на такой мысли: «Ох, ну какая ж круть. Поверить не могу, что моя безумная идея и правда сработала!». https://habr.com/ru/companies/wunderfund/articles/874216/ #cpp #programming 👉 @cpp_lib