Dmitry Develop
176 subscribers
77 photos
35 videos
88 files
205 links
Этот канал в основном будет интересен новичкам в программировании и людям немного поопытнее.
Здесь я буду делиться своими новостями и достижениями в программировании.

Разработка, программирование; c++, gcc, g++, gnu, mingw; winapi, windows; vscode.
Download Telegram
Channel created
Привет, меня зовут Дмитрий.

Я занимаюсь программированием на С++, как хобби.
Мне нравится писать свои реализации алгоритмов или библиотек и делать это нестандартным путём (велосипеды), разбираться принципе их работы.

Здесь я буду делиться своими новостями и достижениями в программировании и разработке, а также делать некоторые доклады на распространённые темы.
Основная часть публикаций будет на канале, а всё остальное и обсуждение в группе.
Поделитесь ссылкой или публикацией с тем, кому мои труды будут интересны.

Полезные публикации:
> Копирование и пересылка материалов канала
> Шаблон проекта C++ для vscode
> Как компилировать и подключать библиотеки в GCC
> Функция для преобразования диапазонов
> Полезные ссылки для С++ разработчиков
> Циклические зависимости и зависимость от порядка перечисления библиотек в GCC
> Преобразование mangled символов в читаемый вид
> Неправильное отображение содержимого STL контейнеров во время отладки в vs code
> Поддержка канала и помощь в ваших вопросах
> Неправильное отображение строк во время отладки в vs code
> Формат отображения числа в контрольных значениях vs code (gdb)

Если вы дочитали до конца, оставьте любую эмодзи-реакцию ❤️ на это сообщение).
Спасибо).

ссылка на канал | ссылка на группу
👍22👾9🍓7🐳4👨‍💻3👀3🌭2🦄2😎2👎1👏1
This media is not supported in your browser
VIEW IN TELEGRAM
Красивый эффект получился.

Помогал человеку с рисованием графики в консоли, а потом решил поэкспериментировать с этим сам.
В итоге сделал что-то своё и добавил основной функционал в библиотеку.

В будущем, используя этот фундамент, я сделаю змейку в консоли.

ссылка на канал | ссылка на группу
👍52
Ручное выделение памяти не самое удобное и безопасное занятие в C++.

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

Для решения это проблемы и упрощения синтаксиса библиотеки, я начинаю использовать идиому программирования RAII (получение ресурса есть инициализация).

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

Выделение памяти на стеке и куче теперь никак не будет отличаться.
И этот подход объединяет в себе преимущества стека и кучи.

Стек: быстрое выделение памяти, ограниченный объём, автоматическое удаление.
Куча: медленное выделение памяти, неограниченный объём, ручное удаление.

ссылка на канал | ссылка на группу
Оказывается, в telegram, если поделиться сообщением из канала, оно полностью дублируется в диалог.

Мне такой момент не нравится по двум причинам:
1) Сообщение полностью дублируется а так же выглядит очень громоздко в диалоге.
2) Я не могу в будущем отредактировать все дубликаты, следовательно в диалоге будет старая версия сообщения без правок и дополнений.

Поэтому, если хотите с кем-то поделиться сообщением из канала, отправьте именно ссылку на сообщение: "Копировать ссылку на сообщение" из контекстного меню или "Копировать ссылку" в конце каждого сообщения.

ссылка на канал | ссылка на группу
👍2
В будущем я хотел бы попробовать разработку под микроконтроллеры: arduino(avr) или esp.

Поэтому буду постепенно привыкать к типам с фиксированным размером данных (stdint.h, cstdint).
Вы же знали, что размер типа данных в C++ может варьироваться?)

Вот так выглядит простой "hello world" в реалиях C++ под windows.
Мне очень даже нравится внешний вид кода программы.

ссылка на канал | ссылка на группу
Обычно, символьные константы для какой-то конкретной функции FunctionNameA я называю таким образом: префикс из первых букв функции + название параметра (fnaOption1, fnaOption2).

Есть у кого варианты более красивого или правильного наименования?
Названия я предпочитаю писать в camelCase.

ссылка на канал | ссылка на группу
👍1
Вот так и программируем).

Сбитый режим, вредная еда и красные глаза; музыка, сухарики и чашка чая; любимый С++ и IDE).

ссылка на канал | ссылка на группу
🔥5
Часть 1
часть 2

Все мы когда-нибудь сталкивались с таким явлением, как текст из иероглифов (крякозябр).

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

Кодировки бывают однобайтовые и многобайтовые.
Это значит, что для представления одного символа из строки требуется один или более байтов.

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

Большинство кодировок являются совместимыми с ASCII (UTF-7), поэтому латиница, цифры и символы отображаются в разных кодировках правильно.

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

ссылка на канал | ссылка на группу
🔥2
В разработке моей небольшой библиотеки для работы с utf-8 строками остановился прогресс.
Хаотичное написание кода не помогло решить архитектурные вопросы и проблемы.
Поэтому я решил начать разработку с нуля, а именно с определения условий и требований к проекту.

Строка: это массив символов с 0 в конце (char string[] { 'S', 't', 'r', 'i', 'n', 'g', '\0'}).
Ввод и вывод данных происходит в виде строки.
Большая часть работы происходит со строками.
Строка закодирована по стандарту utf-8.

Цель проекта разработать следующий функционал:
операции над строками (копирование, конкатенирование, сравнение...),
конвертирование других типов данных из/в строку (stringFromInt, stringToInt),
конвертирование кодировки строки из/в utf-16 для OS windows.

Условия:
Си подобный API с минимальным использованием возможностей C++.
Разрешается делать C++ обёртку над Си API.
Язык программирования: C++20.
Компилятор: gcc x86_64 12.2.0


ссылка на канал | ссылка на группу
👍1
Dmitry Develop
Часть 1 часть 2 Все мы когда-нибудь сталкивались с таким явлением, как текст из иероглифов (крякозябр). Причины, почему строки в одной кодировке выводятся в другой, могут быть разными. Но почему отображаются всегда одни и те же кракозябры? Ответ на этот…
1 часть
2 часть

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

В кодировке UTF-8, CP-1251, CP-866 и других латинская буква 'A' представляется { 65 }.
Однако кириллическая 'А' в UTF-8 { 208, 144 }, в CP-1251 { 192 }, в CP-866 { 128 }.

Более наглядно разницу в кодировании символов можете посмотреть в разделе "Таблица символов" на сайте adruino.

Вот так строка в UTF-8 будет отображаться в разных распространённых кодировках:
UTF-8
"Здравствуйте. Hello. +-*/012345"

UTF-16
"���4�@�0�2�A�B�2�C�9�B�5. Hello. +-*/012345"

CP-437
"Здравствуйте. Hello. +-*/012345"

CP-866
"╨Ч╨┤╤А╨░╨▓╤Б╤В╨▓╤Г╨╣╤В╨╡. Hello. +-*/012345"

CP-1251
"Здравствуйте. Hello. +-*/012345"

CP-1252
"Здрав�твуйте. Hello. +-*/012345"

ссылка на канал | ссылка на группу
👍1
Не могу придумать однозначные названия для свойств строки и названия параметров функций.

У строки есть 3 свойства: объём памяти, количество байтов, количество символов.
Вопрос в том, какое название выбрать для каждого свойства?

int A { 64 }; // размер памяти
int B { 12 }; // количество байтов
int C { 6 }; // количество символов

char string[A] = "Привет";
B = 12 = count({ 208, 159, 209, 128, 208, 184, 208, 178, 208, 181, 209, 130 });
C = 6 = count("Привет");


ссылка на канал | ссылка на группу