🏖 Подборка вакансий для C++-разработчиков за неделю
C/C++ Developer — от 350 000 и до 500 000 ₽ Гибрид (Москва)
Разработчик на C++ — от 250 000 и до 350 000 ₽ Офис (Москва)
С/С++ Linux разработчик — до 8000 $ Удалёнка
Разработчик C++ — от 190 000 и до 250 000 ₽ Офис (Москва)
Программист микроконтроллеров C++ STM — от 200 000 ₽ Гибрид (Москва)
C и C++ Developer — от 240 000 до 270 000 ₽ Гибрид (Москва)
C++/Qt Developer (Рефакторинг) — от 260 000 ₽ Гибрид (Москва, Санкт-Петербург)
Библиотека C/C++ разработчика
C/C++ Developer — от 350 000 и до 500 000 ₽ Гибрид (Москва)
Разработчик на C++ — от 250 000 и до 350 000 ₽ Офис (Москва)
С/С++ Linux разработчик — до 8000 $ Удалёнка
Разработчик C++ — от 190 000 и до 250 000 ₽ Офис (Москва)
Программист микроконтроллеров C++ STM — от 200 000 ₽ Гибрид (Москва)
C и C++ Developer — от 240 000 до 270 000 ₽ Гибрид (Москва)
C++/Qt Developer (Рефакторинг) — от 260 000 ₽ Гибрид (Москва, Санкт-Петербург)
Библиотека C/C++ разработчика
❤1👍1
Поддержка актуальной документации для C++ проектов требует постоянного обновления отдельных файлов. Разработчики забывают обновлять документацию после изменения кода, что приводит к устаревшей и неточной информации.
Doxygen автоматически генерирует документацию из специальных комментариев в коде. Инструмент создает HTML, PDF и другие форматы документации с диаграммами классов и зависимостей.
/**
* @brief Класс для работы с геометрическими фигурами
* @author Имя разработчика
* @date 2024-01-15
*/
class Shape {
protected:
double width; ///< Ширина фигуры
double height; ///< Высота фигуры
public:
/**
* @brief Конструктор с параметрами
* @param w Ширина фигуры (должна быть > 0)
* @param h Высота фигуры (должна быть > 0)
* @throw std::invalid_argument при некорректных параметрах
*/
Shape(double w, double h) : width(w), height(h) {
if (w <= 0 || h <= 0) {
throw std::invalid_argument("Размеры должны быть положительными");
}
}
/**
* @brief Вычисляет площадь фигуры
* @return Площадь в квадратных единицах
* @note Виртуальный метод, должен быть переопределен
*/
virtual double calculateArea() const = 0;
/// Деструктор по умолчанию
virtual ~Shape() = default;
};
# Генерация документации
doxygen -g # Создание конфигурационного файла
doxygen Doxyfile # Генерация документации
— Автоматическая генерация документации из кода
— Поддержка множества выходных форматов
— Создание диаграмм классов и зависимостей
— Синхронизация документации с кодом
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5👍3❤2🥰1
🌀 Тезисы о std::set и std::multiset в C++
💡 Максим Бабенко разбирает ключевые различия между
❗️ Ключевые моменты статьи:
•
• операции
• методы поиска и работы с диапазонами имеют особенности
Основной фокус — практические различия в поведении методов
Особенно полезно для разработчиков, которые активно используют STL и хотят избежать неожиданного поведения при работе с ассоциативными контейнерами.
Помните: в
👉 Статья
Библиотека C/C++ разработчика
💡 Максим Бабенко разбирает ключевые различия между
std::set
и std::multiset
и показывает практические примеры их использования.❗️ Ключевые моменты статьи:
•
std::set
хранит только уникальные элементы, std::multiset
допускает дубликаты• операции
erase()
ведут себя по-разному в двух контейнерах• методы поиска и работы с диапазонами имеют особенности
Основной фокус — практические различия в поведении методов
insert()
, erase()
, find()
и equal_range()
для каждого типа контейнера.Особенно полезно для разработчиков, которые активно используют STL и хотят избежать неожиданного поведения при работе с ассоциативными контейнерами.
Помните: в
std::multiset
метод erase(value)
удаляет ВСЕ элементы с данным значением, а не только один. Для удаления единственного элемента используйте erase(iterator)
.👉 Статья
Библиотека C/C++ разработчика
👍2
🚀 std::unreachable в C++23
Компилятор не всегда понимает, что некоторые участки кода недостижимы. std::unreachable() помогает ему генерировать более оптимальный код.
📋 Пошаговое решение:
1️⃣ Подключите заголовок
2️⃣ Используйте в switch без default
3️⃣ Применяйте в условных блоках
⚠️ Частые ошибки:
❌ Неправильно: Использовать когда код действительно достижим
❌ Неправильно: Забывать про обработку ошибок перед unreachable()
✅ Правильно: Использовать только когда логически уверены в недостижимости
🎯 Практический совет:
std::unreachable() - это контракт с компилятором. Если код всё-таки достигнет этой точки, поведение неопределено. Используйте только когда на 100% уверены.
🎯 Альтернатива:
В старых стандартах используйте
🐸 Библиотека C/C++ разработчика #буст
Компилятор не всегда понимает, что некоторые участки кода недостижимы. std::unreachable() помогает ему генерировать более оптимальный код.
📋 Пошаговое решение:
1️⃣ Подключите заголовок
#include <utility> // C++23
2️⃣ Используйте в switch без default
enum class Color { RED, GREEN, BLUE };
std::string colorToString(Color c) {
switch(c) {
case Color::RED: return "red";
case Color::GREEN: return "green";
case Color::BLUE: return "blue";
}
std::unreachable(); // Говорим компилятору: сюда не попадём!
}
3️⃣ Применяйте в условных блоках
int divide(int a, int b) {
if (b != 0) {
return a / b;
}
// Логически сюда не должны попасть
handleError(); // Наша обработка
std::unreachable(); // Оптимизация для компилятора
}
⚠️ Частые ошибки:
❌ Неправильно: Использовать когда код действительно достижим
❌ Неправильно: Забывать про обработку ошибок перед unreachable()
✅ Правильно: Использовать только когда логически уверены в недостижимости
🎯 Практический совет:
std::unreachable() - это контракт с компилятором. Если код всё-таки достигнет этой точки, поведение неопределено. Используйте только когда на 100% уверены.
🎯 Альтернатива:
В старых стандартах используйте
__builtin_unreachable()
(GCC/Clang) или __assume(false)
(MSVC).Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8❤3
❗ Первый вебинар нашего курса по AI-агентам уже прошёл!
Запись уже выложили на обучающей платформе — можно влетать и догонять с комфортом.
Первые слушатели уже оставили фидбэки — и, кажется, мы попали в точку:
— «теперь наконец понял, как выбирать модели под задачу — раньше брал первую попавшуюся»
— «без лишнего, по делу, в лайве — кайф»
— «огонь, ожидания 100% оправданы лично у меня»
Если хотели вписаться, но сомневались — ещё не поздно. Вебинары идут вживую, записи сохраняются, чат работает, материалы открыты.
⏳ Ещё можно догнать и пройти всё вместе с потоком.
👉 Залетай на курс
Запись уже выложили на обучающей платформе — можно влетать и догонять с комфортом.
Первые слушатели уже оставили фидбэки — и, кажется, мы попали в точку:
— «теперь наконец понял, как выбирать модели под задачу — раньше брал первую попавшуюся»
— «без лишнего, по делу, в лайве — кайф»
— «огонь, ожидания 100% оправданы лично у меня»
Если хотели вписаться, но сомневались — ещё не поздно. Вебинары идут вживую, записи сохраняются, чат работает, материалы открыты.
⏳ Ещё можно догнать и пройти всё вместе с потоком.
👉 Залетай на курс
✏️ Промпт дня: Создание юнит-тестов для надёжного кода
Юнит-тесты — это автоматизированные тесты, которые проверяют поведение отдельных частей кода в изоляции. Они помогают обнаруживать ошибки на ранней стадии и значительно упрощают поддержку кода в C++.
☀️ Решение с помощью AI
🧋 Пример трансформации
До:
После:
✏️ Как часто вы пишете юнит-тесты для своего C++ кода?
🐸 Библиотека C/C++ разработчика #буст
Юнит-тесты — это автоматизированные тесты, которые проверяют поведение отдельных частей кода в изоляции. Они помогают обнаруживать ошибки на ранней стадии и значительно упрощают поддержку кода в C++.
☀️ Решение с помощью AI
Please write unit tests for [имя файла и модуля] to ensure its proper functioning
[ВСТАВЬТЕ ВАШ КОД ЗДЕСЬ]
🧋 Пример трансформации
До:
class Calculator {
public:
int add(int a, int b) { return a + b; }
int divide(int a, int b) {
if (b == 0) throw std::invalid_argument("Division by zero");
return a / b;
}
};
После:
#include <gtest/gtest.h>
TEST(CalculatorTest, AddPositiveNumbers) {
Calculator calc;
EXPECT_EQ(calc.add(2, 3), 5);
}
TEST(CalculatorTest, DivideByZero) {
Calculator calc;
EXPECT_THROW(calc.divide(10, 0), std::invalid_argument);
}
TEST(CalculatorTest, DivideNormalCase) {
Calculator calc;
EXPECT_EQ(calc.divide(10, 2), 5);
}
✏️ Как часто вы пишете юнит-тесты для своего C++ кода?
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥6❤1👍1
💬 Истории подписчиков: Google Test vs Catch2 vs собственный framework
Недавно один из читателей поделился своей историей — возможно, она откликнется и вам:
🤔 А вы какой фреймворк используете в своих проектах?
Библиотека C/C++ разработчика #междусобойчик
Недавно один из читателей поделился своей историей — возможно, она откликнется и вам:
Работаю над embedded системой на C++, нужно покрыть тестами критичный код. Использую Google Test уже два года, но начинаю сомневаться в выборе. Фреймворк тяжелый, долго компилируется, плюс не всегда удобно для embedded разработки.
Попробовал Catch2 — понравилось! Header-only, быстрая компиляция, красивые assertion'ы. Но есть проблема: на некоторых микроконтроллерах не хватает памяти для всех template instantiation'ов.
Коллега использует doctest — еще более легковесный, но менее функциональный. Много чего нету. Есть еще Boost.Test, но это еще одна зависимость.
Думаю о том, чтобы написать минималистичный тест фреймворк именно под embedded. Но боюсь, что это будет изобретение велосипеда по новой, и потрачу время на то, что уже решено.
🤔 А вы какой фреймворк используете в своих проектах?
Библиотека C/C++ разработчика #междусобойчик
❤🔥4❤2🔥2🤩1
Media is too big
VIEW IN TELEGRAM
Как относитесь к созданию своего жпт не через конструктор, а хардкорно через код?
🔥 — я своего завайбкодил
🏃♀️ Ссылка на курс
🔥 — я своего завайбкодил
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱4
🚀 Мгновенное создание реализаций методов класса
Проблема: 🤔 При разработке классов в C++ приходится сначала объявлять методы в заголовочном файле, а затем вручную создавать их реализации в .cpp файле, что требует времени и может привести к ошибкам.
Решение: 🎯 Автоматическое создание реализаций методов класса в соответствующем .cpp файле.
✅ Комбинации клавиш:
• CLion:
• Visual Studio:
• VSCode (с C/C++ расширением):
📝 Процесс в CLion:
• Объявите методы в заголовочном файле
• Нажмите
• Выберите
• Выберите методы для реализации и целевой файл
• Все выбранные методы будут автоматически созданы с правильным синтаксисом
💡 Эта функция также позволяет:
• Генерировать стандартные методы (конструкторы, деструкторы, операторы)
• Создать все недостающие реализации методов сразу
• Добавлять реализации в уже существующие файлы
Библиотека C/C++ разработчика #буст
Проблема: 🤔 При разработке классов в C++ приходится сначала объявлять методы в заголовочном файле, а затем вручную создавать их реализации в .cpp файле, что требует времени и может привести к ошибкам.
Решение: 🎯 Автоматическое создание реализаций методов класса в соответствующем .cpp файле.
✅ Комбинации клавиш:
• CLion:
Alt+Enter
на объявлении → Implement methods
• Visual Studio:
Ctrl+.
на объявлении → Implement all missing members
• VSCode (с C/C++ расширением):
Alt+Shift+I
📝 Процесс в CLion:
• Объявите методы в заголовочном файле
• Нажмите
Alt+Enter
на имени класса• Выберите
Implement methods
• Выберите методы для реализации и целевой файл
• Все выбранные методы будут автоматически созданы с правильным синтаксисом
💡 Эта функция также позволяет:
• Генерировать стандартные методы (конструкторы, деструкторы, операторы)
• Создать все недостающие реализации методов сразу
• Добавлять реализации в уже существующие файлы
Библиотека C/C++ разработчика #буст
❤5👍2🙏2
«Хочу скорость C++, но удобство Python для отладки и экспериментов» — знакомая дилемма многих разработчиков при работе с вычислительными задачами.
💡 Рассматриваем два подхода к интеграции C++ с Python: PyBind11 vs ctypes, их плюсы и подводные камни.
❗️ Ключевые моменты статьи:
• PyBind11 обеспечивает высокоуровневую интеграцию с автоматическим преобразованием типов
• ctypes — низкоуровневое решение с множеством ограничений
• полная интеграция с Numpy и Eigen из коробки через PyBind11
Основной фокус — создание Facade-класса для простого API между языками и настройка CMake для автоматической сборки.
Особенно актуально для проектов машинного обучения, численных вычислений и научных исследований, где нужна производительность C++ с интерактивностью Python.
⚠️ Важный подводный камень: после перекомпиляции C++ кода модуль Python не перезагружается автоматически — требуется полный перезапуск сессии Python.
👉 Статья
Библиотека C/C++ разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4🥱3👍1😁1
😆 Самые быстрые штуки на земле:
• Гепард
• Самолёт
• Скорость света
• Приложения, которые я перенёс с Python на C++
Библиотека C/C++ разработчика #развлекалово
• Гепард
• Самолёт
• Скорость света
• Приложения, которые я перенёс с Python на C++
Библиотека C/C++ разработчика #развлекалово
😁28❤2👍1👏1
Загадка: Я не член семьи, но мне доверяют семейные секреты. Я могу войти в дом без стука. Кто я?
😼 Ответ пишите в комментариях.
Библиотека C/C++ разработчика #междусобойчик
😼 Ответ пишите в комментариях.
Библиотека C/C++ разработчика #междусобойчик
❤3
📰 Свеженькое из мира C++
Подготовили подборку самых интересных материалов за неделю о разных аспектах программирования и интересных проектах в мире C++.
😎 Полезное:
• Генерация документации из кода — автогенерация документация кода в Doxygen
• Тезисы о std::set и std::multiset в C++ — статья в которой разбираются ключевые различия между
• Особенности std::unreachable — полезная фишка, которую можно использовать для оптимизации
• Создание юнит-тестов для надёжного кода — способ создания юнит-тестов с помощью AI
• Мгновенное создание реализаций методов класса — автореализация методов с помощью IDE
• Основные способы вызова C++ кода из Python — основные возможности совместного использования Python и C++
🖨Интересные проекты:
• Carbon Language — язык общего назначения, созданный Google как
• MuseScore — это бесплатная программа для записи нот
• pybind11 — библиотека состоящая только из заголовков, которая представляет типы
Библиотека C/C++ разработчика #свежак
Подготовили подборку самых интересных материалов за неделю о разных аспектах программирования и интересных проектах в мире C++.
😎 Полезное:
• Генерация документации из кода — автогенерация документация кода в Doxygen
• Тезисы о std::set и std::multiset в C++ — статья в которой разбираются ключевые различия между
std::set
и std::multiset
• Особенности std::unreachable — полезная фишка, которую можно использовать для оптимизации
• Создание юнит-тестов для надёжного кода — способ создания юнит-тестов с помощью AI
• Мгновенное создание реализаций методов класса — автореализация методов с помощью IDE
• Основные способы вызова C++ кода из Python — основные возможности совместного использования Python и C++
🖨Интересные проекты:
• Carbon Language — язык общего назначения, созданный Google как
приемник C++
• MuseScore — это бесплатная программа для записи нот
• pybind11 — библиотека состоящая только из заголовков, которая представляет типы
C++
в Python
и наоборотБиблиотека C/C++ разработчика #свежак
❤1👍1🔥1
Forwarded from Библиотека задач по C++ | тесты, код, задания
Forwarded from Библиотека задач по C++ | тесты, код, задания
Что выведет программа (на 64-bit системе)?
Anonymous Quiz
13%
4 4 4
15%
8 8 8
14%
Ошибка компиляции
32%
4 8 4
6%
4 8 8
20%
42 3.14 42
☝️ Последний шанс купить курсы Proglib Academy с доступом навсегда!
Это не просто летняя распродажа, это финал эпохи. Мы дарим скидку 40% на все курсы, включая полностью обновлённый курс по Python (предложение НЕ ДЕЙСТВУЕТ только на курс по AI-агентам для DS-специалистов).
Но главное: с 1 августа доступ ко всем новым курсам станет ограниченным. Успейте инвестировать в свои знания на самых выгодных условиях!
👉 Выбрать курс
Это не просто летняя распродажа, это финал эпохи. Мы дарим скидку 40% на все курсы, включая полностью обновлённый курс по Python (предложение НЕ ДЕЙСТВУЕТ только на курс по AI-агентам для DS-специалистов).
Но главное: с 1 августа доступ ко всем новым курсам станет ограниченным. Успейте инвестировать в свои знания на самых выгодных условиях!
👉 Выбрать курс
🏖️ Подборка вакансий для C++-разработчиков за неделю
C++ Developer (Middle+/Senior) — от 263 000 и до 325 000 ₽ Удалёнка
Senior C++ Developer / Tech Lead — от 400 000 ₽ Гибрид (Москва)
Разработчик С/С++ — до 300 000 ₽ Гибрид (Москва)
Старший C++ разработчик для высоконагруженных систем — Офис (Релокация в г. Лимасол, Кипр) 5000-7000 € до налогов
C разработчик (Platform V Monitor) — до 300 000 ₽ Офис (Москва, Санкт-Петербург, Казань)
C++ Разработчик — от 250 000 и до 350 000 ₽ Гибрид (Москва)
C++/Qt Developer (Рефакторинг) — от 260 000 ₽ Гибрид (Москва, Санкт-Петербург)
Библиотека C/C++ разработчика
C++ Developer (Middle+/Senior) — от 263 000 и до 325 000 ₽ Удалёнка
Senior C++ Developer / Tech Lead — от 400 000 ₽ Гибрид (Москва)
Разработчик С/С++ — до 300 000 ₽ Гибрид (Москва)
Старший C++ разработчик для высоконагруженных систем — Офис (Релокация в г. Лимасол, Кипр) 5000-7000 € до налогов
C разработчик (Platform V Monitor) — до 300 000 ₽ Офис (Москва, Санкт-Петербург, Казань)
C++ Разработчик — от 250 000 и до 350 000 ₽ Гибрид (Москва)
C++/Qt Developer (Рефакторинг) — от 260 000 ₽ Гибрид (Москва, Санкт-Петербург)
Библиотека C/C++ разработчика