Рубрика «c++» - 90

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

  • Регистры и их назначение при вызове функций.
  • Передача и возврат простых типов и структур.
  • Как передача по ссылке и по значению влияют на оптимизации тела функции компилятором.
  • Как используется место при многочисленных вызовах функций.
  • Механизм виртуальных вызовов.
  • Оптимизация хвостовых вызовов и рекурсии.
  • Инициализация структур, массивов и векторов.

Осторожно! Статья содержит большое количество кода на C++ и ассемблере (с комментариями), а также множество таблиц с оценками производительности.

Читать полностью »

Инфраструктура открытых ключей: библиотека GCrypt как альтернатива OpenSSL с поддержкой российской криптографии - 1 Приближается вторая половина 2018 года и скоро должен наступить «2000-й год» в ИОК на базе российской криптографии. Это связано с тем, что

использование схемы подписи ГОСТ Р 34.10-2001 для формирования подписи после 31 декабря 2018 года не допускается!

Уже сегодня не имеет смысла получать сертификаты с подписью по ГОСТ Р 34.10-2001. Читать полностью »

Давным-давно, на заре своего рождения Windows использовала файловую систему FAT. Потом ей на смену Microsoft и IBM разработали NTFS. В те давние времена возникло два противоположных подхода к файловой системе. В Linux используется case-sensitive файловая система, а в Microsoft — case-insensitive.

Суть в том, что в case-sensitive файловой системе считается, что имена, написанные в разных регистрах (например, FILE.txt и file.txt) — это разные имена. А для Windows между ними нет разницы.

Windows и case-sensitive filesystem - 1

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

Добрый день, дорогой читатель!

Эта статья — первая в цикле статей-конспектов, которые я буду писать по ходу прочтения книги Скотта Мейерса "Эффективный и современный c++". Каждой из таких статей будет соответствовать отдельная директория в специально заведенном на github.com проекте с примерами использования описываемых возможностей и приемов.

Читать полностью »

Апгрейдим текстовые протоколы до бинарных и боремся с legacy-кодом на встрече C++ User Group - 1Приглашаем вас на очередную встречу C++ User Group, которая пройдет 28 июня в рамках нашей event-платформы CoLaboratory. В прошлый раз мы обсуждали перформанс и Clang Static Analyser. Теперь поговорим о наболевшем: как избавиться от legacy-кода? Как избежать его образования в дальнейшем? Какие сложности возникают при апгрейде протокола взаимодействия, и как с ними справиться?Читать полностью »

В этой публикации речь пойдет о том, как выполнить сборку C++ проекта, использующего GTest и Boost, при помощи Docker. Статья представляет собой рецепт с некоторыми поясняющими комментариями, представленное в статье решение не претендует на статус Production-ready.

Зачем и кому это может понадобиться?

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

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

Представленное в статье окружение можно использовать как каркас для тестовых заданий или лабораторных работ.

Читать полностью »

В данной публикации я поделюсь опытом о создании IoT устройства с ноля: от появления идеи и воплощении ее в «железе» до создания микропрограммы для контроллера и web-интерфейса для управления созданным устройством через сеть интернет.

До создания этого устройства я:

  • Почти не разбирался схемотехнике. Только на уровне принципов работы
    резистора/транзистора… Я не имел никакого опыта в создании сколь-нибудь сложных схем.
  • Никогда не проектировал печатных плат.
  • Никогда не паял SMD компонент. Уровень владения паяльником был на уровне припаивания проводов и какого-нибудь реле.
  • Никогда не писал таких сложных программ для микроконтроллера. Весь опыт был на уровне «зажги светодиод в Arduino», а контроллер ESP8266 я встретил впервые.
  • Совсем немного писал на C++ для «большого брата», но это было более десятка лет назад и все давно забылось.

Конечно, опыт работы программистом (главным образом это Microsoft .NET) и системное мышление помогли мне разобраться в теме. Думаю, сможет и читатель этой публикации. Полезных ссылок и статей в интернете море. Самые, на мой взгляд интересные, и помогающие разобраться в теме, я привожу по ходу статьи.

Читать полностью »

Потребовалось измерить ток потребления одного устройства
+ хранить полученные значения в таблице БД (PostgreSQL)

Первые 5 минут гугления показали — почти все производители полупроводников, имеют красивые решения, на одном кристалле
Сложные схемы на ОУ, остались далеко в прошлом

Выбор пал на INA260
Напряжение до 36v, простой для монтажа корпус, компромиссная стоимость
Но самый решающий аргумент, он уже валялся в тумбе :D Среди прочих образцов
Настало время его задействовать

Включаемая схема ничем не отличается от приведенной в даташите
Ее не высокая сложность, позволяет все собрать на коленке
image
Читать полностью »

Речь пойдёт о таком простом, но часто используемом паттерне как chain of responsibility(цепочка ответственности). Суть паттерна в том, что для обработки какого либо события мы используем несколько обработчиков, каждый из которых принимает решение о том, что и когда передавать следующему. В сети есть масса примеров реализации на C++, но я хочу показать реализацию только на лямдба-выражениях. В этой реализации можно будет посмотреть немного уличной template-magic.
Читать полностью »

image

Готовы погрузиться с головой в дивный мир программирования? Хотите узнать как непредсказуемо могут повести себя несколько простых строк кода?

Если ваш ответ "Да!" — добро пожаловать под кат.

Вас будут ждать несколько занимательных задачек на С или С++.

Правильный ответ с объяснением всегда будет спрятан под спойлером.

Удачи!

Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js