Привет, меня зовут Дмитрий.
Я занимаюсь программированием на С++, как хобби.
Мне нравится писать свои реализации алгоритмов или библиотек и делать это нестандартным путём (велосипеды), разбираться принципе их работы.
Здесь я буду делиться своими новостями и достижениями в программировании и разработке, а также делать некоторые доклады на распространённые темы.
Основная часть публикаций будет на канале, а всё остальное и обсуждение в группе.
Поделитесь ссылкой или публикацией с тем, кому мои труды будут интересны.
Полезные публикации:
> Копирование и пересылка материалов канала
> Шаблон проекта C++ для vscode
> Как компилировать и подключать библиотеки в GCC
> Функция для преобразования диапазонов
> Полезные ссылки для С++ разработчиков
> Циклические зависимости и зависимость от порядка перечисления библиотек в GCC
> Преобразование mangled символов в читаемый вид
> Неправильное отображение содержимого STL контейнеров во время отладки в vs code
> Поддержка канала и помощь в ваших вопросах
> Неправильное отображение строк во время отладки в vs code
> Формат отображения числа в контрольных значениях vs code (gdb)
Если вы дочитали до конца, оставьте любую эмодзи-реакцию ❤️ на это сообщение).
Спасибо).
ссылка на канал | ссылка на группу
Я занимаюсь программированием на С++, как хобби.
Мне нравится писать свои реализации алгоритмов или библиотек и делать это нестандартным путём (велосипеды), разбираться принципе их работы.
Здесь я буду делиться своими новостями и достижениями в программировании и разработке, а также делать некоторые доклады на распространённые темы.
Основная часть публикаций будет на канале, а всё остальное и обсуждение в группе.
Поделитесь ссылкой или публикацией с тем, кому мои труды будут интересны.
Полезные публикации:
> Копирование и пересылка материалов канала
> Шаблон проекта 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
Красивый эффект получился.
Помогал человеку с рисованием графики в консоли, а потом решил поэкспериментировать с этим сам.
В итоге сделал что-то своё и добавил основной функционал в библиотеку.
В будущем, используя этот фундамент, я сделаю змейку в консоли.
ссылка на канал | ссылка на группу
Помогал человеку с рисованием графики в консоли, а потом решил поэкспериментировать с этим сам.
В итоге сделал что-то своё и добавил основной функционал в библиотеку.
В будущем, используя этот фундамент, я сделаю змейку в консоли.
ссылка на канал | ссылка на группу
👍5❤2
Ручное выделение памяти не самое удобное и безопасное занятие в C++.
Потому что память нужно вручную выделять, вручную освобождать.
Придётся писать больше кода, а ещё можно очень легко создать утечку памяти.
Для решения это проблемы и упрощения синтаксиса библиотеки, я начинаю использовать идиому программирования RAII (получение ресурса есть инициализация).
Это первые наброски, но мне уже нравится, что и этого можно сделать.
Выделение памяти на стеке и куче теперь никак не будет отличаться.
И этот подход объединяет в себе преимущества стека и кучи.
Стек: быстрое выделение памяти, ограниченный объём, автоматическое удаление.
Куча: медленное выделение памяти, неограниченный объём, ручное удаление.
ссылка на канал | ссылка на группу
Потому что память нужно вручную выделять, вручную освобождать.
Придётся писать больше кода, а ещё можно очень легко создать утечку памяти.
Для решения это проблемы и упрощения синтаксиса библиотеки, я начинаю использовать идиому программирования RAII (получение ресурса есть инициализация).
Это первые наброски, но мне уже нравится, что и этого можно сделать.
Выделение памяти на стеке и куче теперь никак не будет отличаться.
И этот подход объединяет в себе преимущества стека и кучи.
Стек: быстрое выделение памяти, ограниченный объём, автоматическое удаление.
Куча: медленное выделение памяти, неограниченный объём, ручное удаление.
ссылка на канал | ссылка на группу
Оказывается, в telegram, если поделиться сообщением из канала, оно полностью дублируется в диалог.
Мне такой момент не нравится по двум причинам:
1) Сообщение полностью дублируется а так же выглядит очень громоздко в диалоге.
2) Я не могу в будущем отредактировать все дубликаты, следовательно в диалоге будет старая версия сообщения без правок и дополнений.
Поэтому, если хотите с кем-то поделиться сообщением из канала, отправьте именно ссылку на сообщение: "Копировать ссылку на сообщение" из контекстного меню или "Копировать ссылку" в конце каждого сообщения.
ссылка на канал | ссылка на группу
Мне такой момент не нравится по двум причинам:
1) Сообщение полностью дублируется а так же выглядит очень громоздко в диалоге.
2) Я не могу в будущем отредактировать все дубликаты, следовательно в диалоге будет старая версия сообщения без правок и дополнений.
Поэтому, если хотите с кем-то поделиться сообщением из канала, отправьте именно ссылку на сообщение: "Копировать ссылку на сообщение" из контекстного меню или "Копировать ссылку" в конце каждого сообщения.
ссылка на канал | ссылка на группу
👍2
В будущем я хотел бы попробовать разработку под микроконтроллеры: arduino(avr) или esp.
Поэтому буду постепенно привыкать к типам с фиксированным размером данных (stdint.h, cstdint).
Вы же знали, что размер типа данных в C++ может варьироваться?)
Вот так выглядит простой "hello world" в реалиях C++ под windows.
Мне очень даже нравится внешний вид кода программы.
ссылка на канал | ссылка на группу
Поэтому буду постепенно привыкать к типам с фиксированным размером данных (stdint.h, cstdint).
Вы же знали, что размер типа данных в C++ может варьироваться?)
Вот так выглядит простой "hello world" в реалиях C++ под windows.
Мне очень даже нравится внешний вид кода программы.
ссылка на канал | ссылка на группу
Обычно, символьные константы для какой-то конкретной функции FunctionNameA я называю таким образом: префикс из первых букв функции + название параметра (fnaOption1, fnaOption2).
Есть у кого варианты более красивого или правильного наименования?
Названия я предпочитаю писать в camelCase.
ссылка на канал | ссылка на группу
Есть у кого варианты более красивого или правильного наименования?
Названия я предпочитаю писать в camelCase.
ссылка на канал | ссылка на группу
👍1
Часть 1
часть 2
Все мы когда-нибудь сталкивались с таким явлением, как текст из иероглифов (крякозябр).
Причины, почему строки в одной кодировке выводятся в другой, могут быть разными.
Но почему отображаются всегда одни и те же кракозябры?
Ответ на этот вопрос довольно прост.
Кодировки бывают однобайтовые и многобайтовые.
Это значит, что для представления одного символа из строки требуется один или более байтов.
Представляйте кодировку, как очень большую таблицу, где для каждому символу присваивается уникальный порядковый номер в рамках этой кодировки.
Большинство кодировок являются совместимыми с ASCII (UTF-7), поэтому латиница, цифры и символы отображаются в разных кодировках правильно.
Именно потому, что порядковые номера одного и того же символа могут отличаться в разных кодировках или вообще отсутствовать, строка может стать нечитаемой.
ссылка на канал | ссылка на группу
часть 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"
ссылка на канал | ссылка на группу
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 свойства: объём памяти, количество байтов, количество символов.
Вопрос в том, какое название выбрать для каждого свойства?
ссылка на канал | ссылка на группу
У строки есть 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("Привет");ссылка на канал | ссылка на группу