Все потоки
Поиск
Написать публикацию
Обновить
224.33

C *

Типизированный язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

Начальное ускорение математики

Время на прочтение12 мин
Количество просмотров4.7K

Всем привет. В графических приложениях есть своего рода сердце — этой графики. Это математика, от того как исполнена математика, зависит общий отклик приложения, есть некоторые подходы, при помощи которых не сразу, но можно войти в начальное понимание, как и что ускорять.

В этой статье хочу показать как я почти в 10 раз ускорил графику при помощи математики.

Читать далее

Эмулятор NES в каждый проект! [0x02]

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров2.6K

Спустя месяц разработки, а то и не весь месяц я разрабатывал, я смог добиться корректной работы эмулятора. В перерывах в разработке и я почитывал книги разные и думал о том, где могут быть баги. Всего было два бага:

Читать далее

Самые Эпичные Баги при Программировании Микроконтроллеров

Уровень сложностиПростой
Время на прочтение14 мин
Количество просмотров24K

У каждого программиста микроконтроллеров с годами кристаллизируется коллекция золотых багов. Некоторые из них весьма эпичные.

Самый типичный баг - это зависание прошивки.

Выявление причин багов и их устранение порой сродни работы детективом. Это проявляется в том, что порой очень трудно выявить причину бага. Сначала разработчик идет по ложному следу, ходит кругами, а в конце-концов выясняется, что причина на самом деле была проста, как солдатский валенок.

Читать далее

Типичные ошибки в Си: как их избежать и писать надёжный код

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров6.3K

Типичные ошибки в Си: как их избежать и писать надёжный код

Вы устали от:
❌ Тайных утечек памяти, которые пожирают ресурсы.
❌ Загадочных падений программы без объяснения причин.
❌ Указателей-призраков, стреляющих в вас из темноты сегфолтов.

Эта статья — ваш щит и меч:
✅ Примеры кода, которые покажут, где прячутся ошибки.
✅ Практические советы для мгновенного улучшения кода.
✅ Инструменты-спасатели (Valgrind, Cppcheck).

🛠 «Если ваш код на Си работает — это чудо. Сделайте так, чтобы это было закономерностью».

Для кого:
• Начинающие разработчики, которые хотят писать код, а не баги.
• Те, кто считает, что free() — это про свободу, а не про память.
• Все, кто устал гуглить «почему Си опять вылетает».

Погружаемся

Когда кажется, что нашёл баг в компиляторе

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров2.4K

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

Читать далее

В преддверии испытаний статических анализаторов под руководством ФСТЭК России

Уровень сложностиСредний
Время на прочтение11 мин
Количество просмотров2.6K

Испытания статических анализаторов исходных кодов компилируемых и динамических языков программирования под руководством ФСТЭК России


В 2024 году вышел ГОСТ Р 71207 — Статический анализ программного обеспечения. Однако пользователям анализаторов сложно определять, насколько тот или иной инструмент соответствует критериям, изложенным в стандарте. Поэтому ФСТЭК России в 2025 году организует испытания статических анализаторов, результаты которых будут опубликованы в конце года. Ближайший этап — это выработка критериев оценки, и я решил предварительно изложить некоторые мысли по этой теме, которые, возможно, будут интересны жюри и участникам.

Читать дальше →

История C и C++. Часть вторая: стандартизация C и C++, Qt, Clang, Unreal Engine

Уровень сложностиПростой
Время на прочтение13 мин
Количество просмотров6.8K

Вторая часть истории о том, как C и C++ стали такими, какими мы их знаем сегодня. Здесь расскажем об официальной сертификации C и C++, а также о вышедших инструментах в период с 1991 года и до наших дней.

Читать далее

Пишем простой драйвер на Rust

Время на прочтение9 мин
Количество просмотров17K

Популярность Rust неуклонно растёт, а с ней и сопутствующая экосистема. И оно не удивительно, ведь это единственный современный язык, который обеспечивает безопасность памяти и многопоточной обработки на этапе компиляции, предоставляя мощную и богатую систему сборки (cargo), а также всё больше различных пакетов (крейтов).

В своей повседневной работе я по-прежнему придерживаюсь C++, так как основная её часть связана с низкоуровневым программированием систем и ядра, а из этого языка легко задействовать написанный на С Windows API и COM API.

Rust — это язык для системного программирования, то есть он может справляться с теми же задачами, что и C/C++. Основное неудобство при этом создаёт громоздкий синтаксис, необходимый для преобразования типов С в типы Rust. Но это неудобство можно преодолеть, используя подобающие обёртки и макросы.

Короче говоря, я решил попробовать написать простой и полезный драйвер WDM. Это будет Rust-версия драйвера «Booster», о котором я пишу в своей книге (Windows Kernel Programming), позволяющего изменять приоритет любого потока на любое значение.
Читать дальше →

Простой односвязный список на С

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров3K

Всем привет. В 3д помимо моделек - статических, существуют анимации - анимированные модели, которые имеют набор своих данных, эти данные нужны для отображения модельки и её анимирования.

Если выбрать такой язык как С, по каким-либо причинам, рано или поздно можно столкнуться с отсутствием некоторых сущностей. Самой часто используемой сущностью является vector. Если оттолкнуться от того что простейшая абстракция вектор, и еще чуть упростить можно придти логически к односвязному списку. Но вот незадача, если пребывать на этом этапе по наименьшему сопротивлению, то придётся на каждую структуру писать свою реализацию - это в худшем случае. В этой статье хочу показать как решил вопрос с односвязным списком.

Читать далее

Как я купил ноутбук для дошколят на MIPS-процессоре и все заверте…

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров28K

Осторожно: в статье я постарался подробно написать про всё, за что вы так любите Хабр: аппаратный моддинг и ковыряние в железе, хакинг Linux и обход проприетарной оболочки, а также программирование и портирование софта с других платформ.

Я очень большой фанат портативных гаджетов с полноценными QWERTY-клавиатурами: ноутбуков, коммуникаторов и различных хэндхелдов. Когда в мои руки попадает девайс с Linux или Windows CE в том или ином виде, я стараюсь максимально расширить функционал устройства и порой даже портирую программы с других платформ! Недавно мне удалось купить китайский детский обучающий ноутбук с MIPS-процессором и поворотным дисплеем всего за 1 000 рублей. Интересно узнать о том, как я хакнул девайс и причём здесь Dingoo A320? Тогда жду вас под катом!

Читать далее

Избавляемся от UB в memcpy

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров5.6K

Неопределённое поведение (undefined behavior, UB) в языке программирования C — постоянный источник жарких споров между программистами. С одной стороны, UB может быть важным для оптимизаций компилятора. С другой стороны, оно упрощает появление багов, которые приводят к проблемам безопасности.

Хорошая новость: N3322 был принят для C2y, что позволит устранить неопределённое поведение из этого конкретного участка языка C и сделать всё показанное ниже чётко определённым:

memcpy(NULL, NULL, 0);
memcmp(NULL, NULL, 0);
(int *)NULL + 0;
(int *)NULL - 0;
(int *)NULL - (int *)NULL;

Читать далее

Перепрограммируем заводской датчик CO2 Zigbee от компании Tuya

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров17K

Предыдущий проект о перепрограммировании заводского термостата вызвал достаточно большой интерес у сообщества (ссылка будет в конце статьи). И вот поступило предложение проверить, можно ли таким же образом избавиться от спама на датчике CO2.

Читать далее

Откуда взялась хвостовая рекурсия и когда ожидается ее реализация в новом стандарте языка Си. Рекурсия VS Iteration

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров3.2K

Я надеюсь что это неожиданное название заставит вас обратить внимание на эту статью, но самое главное на что я надеюсь что прочитав эту статью вы уже не сможете так просто игнорировать факты.

Когда я учился программированию меня учили что рекурсия это плохо и нельзя надеятся что компилятор сможет заменить написанную тобой рекурсию на итеративный процесс. В какой то степени нас учили искать способ замены рекурсии итеративным алгоритмом. На сколько я понимаю замена рекурсии итеративным алгоритмом это одна из базовых задач программирования. Здорово когда она уже решена в компиляторе (в интерпретаторе) и в языке таком как диалект LISP-а который используется для примеров в книге известной под абревиатурой SICP, но в любом случае не помешает знание о том как эта задача решается. Как минимум это поможет вам лучше понимать работу компилятора и эффективнее его использовать.

Читать далее

Ближайшие события

Многопоточное программирование на C

Уровень сложностиСредний
Время на прочтение13 мин
Количество просмотров15K

Привет хабр! Новичок в написании статей, но никогда не поздно начать. Объемный гайд по функциям pthreads для людей знающих базы C/C++.

Читать далее

Разработка трёхмерного движка для Dendy/NES. Часть 1

Уровень сложностиСредний
Время на прочтение18 мин
Количество просмотров16K

В этой статье мы поговорим о разработке простого трёхмерного движка для консоли Dendy (NES/Famicom), который позволит выводить полигональные трёхмерные модели и проводить над ними базовые манипуляции (вращение, перемещение, трансформация, заливка полигонов и т. д.). В первом части мы обсудим реализацию вывода двумерных примитивов и организацию памяти в условиях ограничений NES.

Читать далее

От ASCII к ASIC: портируем donut.c на крошечный кремниевый срез

Время на прочтение10 мин
Количество просмотров1.9K

Прошло много лет с тех пор, как я написал donut.c, и всё это время я не раз задумывался, можно ли как-то упростить этот проект. Например, может быть, нашёлся бы способ очертить пончик лучами, дописав для этого немного кода. В октябре 2023 года я написал твит о совершенно внезапном просветлении, позволившем мне найти новый подход к этой проблеме — без привлечения памяти, без каких-либо синусов, косинусов, без квадратных корней, деления, строго говоря, даже без умножения. Всё нужное можно отобразить с помощью одних только сдвигов и сложений. Вот обновлённая версия на C.


Читать дальше →

Rust в ядре Linux: лекарство или яд? Споры о будущем

Время на прочтение4 мин
Количество просмотров13K


В мире разработки программного обеспечения, особенно в области системного программирования, языки C и Rust занимают особое место. C, как проверенный временем язык, десятилетиями служил основой для создания операционных систем, включая Linux. Однако с появлением Rust, который позиционируется как более безопасный и современный ЯП, начались жаркие споры о том, стоит ли переписывать части ядра Linux на Rust или оставить всё как есть. Дискуссия вышла на новый уровень, когда разработчики Linux начали активно сопротивляться внедрению Rust. Кристоф Хеллвиг даже сравнил нововведение с «раковой опухолью». Что стоит за этим противостоянием, и почему Rust вызывает такие полярные мнения?
Читать дальше →

Разработка трёхфазного энергомонитора на базе ESP8266 с функцией автоматической проверки прибора учёта

Уровень сложностиПростой
Время на прочтение16 мин
Количество просмотров10K

Подробная инструкция по разработке трёхфазного энергомонитора на базе ESP8266 с функцией автоматической проверки прибора учёта электроэнергии.

Читать далее

Электронные песочные часы с Алиэкспресс

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров11K

На алиэкспресс можно приобрести конструктор песочных часов, который собирается в течении одного вечера. Для управления светодиодами используется микроконтроллер STC15W204S с прошивкой, исходный код которой не предоставляется продавцами конструктора .

В интернете несколько энтузиастов выложили прошивки и описание алгоритмов их работы. Но посмотрев исходный код, я понял, что можно попытаться сделать лучше.

Насколько получилось лучше, чем у предшественников? Судить читателям.

Читать далее

Сборка проектов Си и Си++: от простого к сложному. Часть II. Сборщики

Уровень сложностиСредний
Время на прочтение22 мин
Количество просмотров14K

Продолжаю тему о сборке проектов на Си и Си++, первая часть которой размещена здесь.

Рецепты сборки по правилам хорошего тона должны поставляться с проектом и очень желательно, чтобы они не были привязаны к конкретной ОС или хотя бы к конкретному дистрибутиву Linux, используя специфические команды вроде apt-get, yum, emerge. Если это небольшой пет-проект выходного дня, то, конечно, в качестве рецепта сгодится и bash-скрипт. Пользователи адаптируют. Но если к проекту подключаются другие разработчики, то лучше потратить время на автоматизацию сборки, чтобы не терять его оптом в будущем. В этой части речь пойдёт об инструментах, которые используются для автоматизации процесса сборки программного обеспечения.
Читать дальше →

Вклад авторов