Как стать автором
Обновить
90.35

C *

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

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

Неожиданная проблема с макросами (точнее без макросов)

Уровень сложности Средний
Время на прочтение 3 мин
Количество просмотров 2.4K
Ненормальное программирование *Программирование *C++ *Компиляторы *C *
Мнение

image


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


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


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


И вот при окончательной доработке синтаксиса макросов для нового языка программирования я неожиданно столкнулся со сценарием, который элементарно реализуется с помощью макропроцессора C/C++, но который невозможно повторить при использовании любого из рекомендованных инструментов для их замены. И я буду очень рад, если ошибаюсь и кто-нибудь подскажет решение, которое можно сделать без применения макропроцессора.

Читать дальше →
Всего голосов 4: ↑3 и ↓1 +2
Комментарии 28

Новости

XML дерево на С. Пишем подготовительный код для библиотеки targetXML

Уровень сложности Сложный
Время на прочтение 18 мин
Количество просмотров 1.1K
XML *C *
Из песочницы

targetXML - маленький экскурс в структуру дерева XML на примере работоспособного кода «pure C».

Здравствуй уважаемый читатель. Я пишу код на С и С++. В этой короткой статье подробно описывается мой подготовительный этап создания маленькой библиотечки на языке С, работающей с файлами xml. Рассказ об опыте такой разработки может пригодится как новичкам, любителям, так и профессионалам. К тому же в статье есть ссылка на исходный код, и вы всегда можете, при желании, заняться оптимизацией.

Читать далее
Всего голосов 7: ↑5 и ↓2 +3
Комментарии 3

Программная реализация шифровальной машины «Энигма» на языке Си

Уровень сложности Средний
Время на прочтение 17 мин
Количество просмотров 5.9K
Информационная безопасность *Криптография *Программирование *C *
Ретроспектива

Пишем старую добрую шифровальную машину на старом добром языке программирования.

Читать далее
Всего голосов 27: ↑27 и ↓0 +27
Комментарии 8

На пол пути к конечному автомату для Arduino. Однопроходные функции и фиксация событий программы с помощью флагов

Уровень сложности Средний
Время на прочтение 32 мин
Количество просмотров 2.9K
Блог компании Timeweb Cloud C *Программирование микроконтроллеров *Разработка под Arduino *Электроника для начинающих
Туториал
image

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

Но так ли хорош этот метод для программирования микроконтроллеров, и есть ли какая-то простая и доступная альтернатива линейным алгоритмам? Я предлагаю вместе разобраться в этом вопросе.
Читать дальше →
Всего голосов 22: ↑21 и ↓1 +20
Комментарии 33

Истории

KVM: Что такое Kernel-based Virtual Machine?

Уровень сложности Средний
Время на прочтение 17 мин
Количество просмотров 9K
Программирование *Системное программирование *Виртуализация *C *Разработка под Linux *

Начнем с простого вопроса:

Что означает QEMU/KVM или QEMU-KVM?

Можно ответить - это QEMU + KVM или qemu-system, запущенный с kvm в качестве ускорителя. Но в какой-то степени это еще и анахронизм, так как с появлением KVM его разработчики для интеграции с QEMU поддерживали отдельный форк qemu-kvm, но начиная с QEMU версии 1.3 (декабрь 2012) все основные изменения из qemu-kvm были перенесены в главную ветку QEMU, а qemu-kvm объявлен устаревшим.

В разных дистрибутивах до сих пор еще можно встретить исполняемый файл qemu-kvm или просто kvm, но это лишь обертки над qemu-system:

exec qemu-system-x86_64 -enable-kvm "$@"

или симлинки:

/usr/bin/kvm -> qemu-system-x86_64

А в самом qemu существует проверка:

Читать далее
Всего голосов 70: ↑70 и ↓0 +70
Комментарии 7

Добавляем деструкторы в C

Уровень сложности Средний
Время на прочтение 6 мин
Количество просмотров 2.9K
C *

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

read(&publication);
Всего голосов 20: ↑19 и ↓1 +18
Комментарии 15

О вреде GOTO-фобии (с примерами на C)

Время на прочтение 17 мин
Количество просмотров 24K
Программирование *Совершенный код *Алгоритмы *C *
Перевод

Готофобия – это боязнь использовать инструкции goto. Обычно возникает из-за непонимания и незнания контекста этой проблемы, а также из-за историй о незапамятных временах в истории программировании. Разработчики, страдающие готофобией, готовы жертвовать удобочитаемостью своего кода, только бы не прибегать к goto.

Читать далее
Всего голосов 126: ↑119 и ↓7 +112
Комментарии 312

C/C++ из Python (Kivy, ctypes) на iOS

Уровень сложности Сложный
Время на прочтение 9 мин
Количество просмотров 1.5K
Python *Разработка под iOS *C++ *C *Xcode *
Туториал
main

Ранее я писал статьи C/C++ из Python (ctypes), C/C++ из Python (Kivy, ctypes) на Android. В них описывается процесс запуска на Linux и Android. Теперь поговорим как тоже самое сделать на iOS. В этой статье речь пойдет о сборке, необходимых инструментах, механизмах отладки и установки.

Читать дальше →
Всего голосов 2: ↑2 и ↓0 +2
Комментарии 0

PostgreSQL под капотом. Часть 4. Цикл бэкэнда

Время на прочтение 21 мин
Количество просмотров 2.1K
Open source *PostgreSQL *Анализ и проектирование систем *C *Реверс-инжиниринг *

Приветствую!

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

Кроме нее будут рассмотрены:

— Модуль для работы с транзакциями.

— Исключения в С и их реализацию.

— Клиент‑серверный протокол.

Читать далее
Всего голосов 6: ↑6 и ↓0 +6
Комментарии 1

Настройка FDCAN в CubeMx

Уровень сложности Простой
Время на прочтение 4 мин
Количество просмотров 1K
C++ *C *
Из песочницы

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

Читать далее
Всего голосов 9: ↑8 и ↓1 +7
Комментарии 0

Делаем отказоустойчивый Asterisk realtime

Уровень сложности Сложный
Время на прочтение 7 мин
Количество просмотров 3.7K
Блог компании Ozon Tech Высокая производительность *Asterisk *C *
Кейс

Если вы спросите у прожжённых системных администраторов, используют ли они realtime‑конфигурацию в Asterisk, с вероятностью 90% ответ будет отрицательный. В качестве обоснования, скорее всего, услышите «При недоступности источников данных телефония станет неработоспособной». Если интересно узнать, как мы обошли это ограничение, читайте дальше.

Читать далее
Всего голосов 34: ↑34 и ↓0 +34
Комментарии 11

Рекурсивное название небольшой статьи о рекурсии

Уровень сложности Средний
Время на прочтение 7 мин
Количество просмотров 2.2K
Lisp *Алгоритмы *C *Функциональное программирование *
Мнение

Практика преподавания и изучения программирования преимущественно на базе императивных языков (включая объектно-ориентированные императивные языки) приводит к тому, что такой фундаментальный алгоритмический механизм, как рекурсия, остаётся плохо понятным многими программистами и порождает заблуждения, транслируемые в популярной культуре. Попытаемся внести в вопрос немного ясности.

Читать далее
Всего голосов 6: ↑3 и ↓3 0
Комментарии 46

Приключения капитана Блада: потонет ли Арабелла?

Время на прочтение 11 мин
Количество просмотров 10K
Блог компании PVS-Studio Программирование *C++ *Разработка игр *C *

Недавно в сети появилась новость о том, что был открыт исходный код игры "Приключения капитана Блада". Мы не смогли пройти мимо и проверили его качество с помощью PVS-Studio. Потонет ли легендарный корабль капитана Блада от найденных багов? Давайте узнаем!

Читать далее
Всего голосов 22: ↑19 и ↓3 +16
Комментарии 5

Разработка приложений для платёжных терминалов Ingenico

Уровень сложности Сложный
Время на прочтение 35 мин
Количество просмотров 11K
Блог компании Timeweb Cloud Ненормальное программирование *Платежные системы *C *
Туториал
Приветствую всех!

Скажите: интересовались ли вы хоть раз тем, как устроены и работают банковские платёжные терминалы, к которым вы прикладываете свою карту едва ли не ежедневно? Хотели ли вы узнать, как написать что-то своё под какое-нибудь из данных устройств?

Если ваш ответ — «Да», то этот пост определённо для вас.



Обычно тема программирования POS-terminal'ов покрыта завесой тайны, но сейчас мы постараемся её развеять. В ходе данной статьи разберёмся с азами разработки под такие девайсы. Узнаем, где скачать нужный софт, как его установить, а также, собственно, как скомпилировать и запустить нашу первую программу. Традиционно будет много интересного.
Читать дальше →
Всего голосов 85: ↑85 и ↓0 +85
Комментарии 51

Просто о RCU (Read–Copy-Update). Часть 2

Уровень сложности Средний
Время на прочтение 4 мин
Количество просмотров 1.3K
Программирование *C++ *C *Разработка под Linux *

Продолжим тему использования механизма RCU в системном программировании Linux. В первой части мы создали примитивный цикл неблокирующего изменения одной переменной, в данной части разберем пример неблокирующего изменения списка значений.

Читать далее
Всего голосов 1: ↑1 и ↓0 +1
Комментарии 0

STM8L подробное руководство первых шагов

Уровень сложности Простой
Время на прочтение 6 мин
Количество просмотров 5.4K
C *Программирование микроконтроллеров *
Из песочницы

Речь пойдет о маломощном микроконтроллере STM8L001J3. Постараюсь подробно рассказать о необходимых шагах для прошивки "hello world" и различных подводных камнях.

Читать далее
Всего голосов 24: ↑24 и ↓0 +24
Комментарии 6

Генератор случайных чисел на базе неопределённого поведения состояния гонки

Уровень сложности Средний
Время на прочтение 15 мин
Количество просмотров 3.3K
Криптография *Программирование *C *Go *Параллельное программирование *

Генерация случайных чисел окружает нас везде. Любой шаг, дыхание, дуновение ветра, шум кулера, частота мяуканья кошки и т.п. уже может рассматриваться как некая генерация случайности. Так например, насколько вы контролируете вашу ходьбу? Можете ли вы с точностью до нанометра определить точку опоры? Если не можете, то сама погрешность в неопределённости расстояния начинает становиться для вас генератором случайности.

Читать далее
Всего голосов 11: ↑11 и ↓0 +11
Комментарии 20

STM32 Часть 1. Как поморгать светодиодиком

Уровень сложности Простой
Время на прочтение 5 мин
Количество просмотров 6K
Программирование *C *Программирование микроконтроллеров *Электроника для начинающих
Туториал

Приветствую!

Данная статья открывает цикл статей о программировании микроконтроллеров STM32 для новичков.

Сегодня я расскажу как написать моргание светодиодом двумя способами с использованием инструментов, труднодоступных в 2023 году.

Читать далее
Всего голосов 25: ↑16 и ↓9 +7
Комментарии 39

Регистры vs библиотеки на примере сердечек

Время на прочтение 15 мин
Количество просмотров 5.8K
C *Программирование микроконтроллеров *DIY или Сделай сам
Кейс

Впереди 14 февраля. Можно спорить об уместности этого праздника в наших краях, а можно направить энергию в мирное русло. Например, откопать Arduino, щедро обсыпать светодиодами и сформовать их во что-то сердечкоподобное. Неубедительно? Согласен. Давайте так: откопаем в дальней коробке макетку на STM32, забудем, что у нас есть готовые библиотеки и подёргаем регистры, выгрызая каждый байт ROM у злобного компилятора. Потом сделаем всё тоже самое, но без фанатизма, с привлечением CMSIS библиотек и сравним результаты. Возможно даже сделаем выводы. Будет код, надругательство над таблицей векторов. Ардуинка тоже будет, куда ж без неё.

Build Target
Всего голосов 37: ↑36 и ↓1 +35
Комментарии 33

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

Работа

Программист С
38 вакансий