Что ж, предыдущее случайное недоразумение я переписал:
https://t.me/a248640develop/155
ссылка на канал | ссылка на группу
https://t.me/a248640develop/155
ссылка на канал | ссылка на группу
Dmitry Develop
projectHierarchy.png
Переделываю с нуля шаблон проекта на C++ для vs code.
Дело дошло до настроек внешнего оформления и создания иерархии проекта.
Хочется в шаблоне проекта указать ключи компилятора для подключения какой-нибудь самописной или сторонней библиотеки.
Вопрос в том, какую иерархию проекта сделать?
Сделать папку library и туда класть скомпилированные библиотеки, но куда класть header файлы?
Не хотелось бы перемешивать файлы проекта с файлами библиотеки.
Может, разбить проект как бы контейнеры, где у каждого контейнера есть свои исходные и заголовочные файлы?
ссылка на канал | ссылка на группу
Дело дошло до настроек внешнего оформления и создания иерархии проекта.
Хочется в шаблоне проекта указать ключи компилятора для подключения какой-нибудь самописной или сторонней библиотеки.
Вопрос в том, какую иерархию проекта сделать?
Сделать папку library и туда класть скомпилированные библиотеки, но куда класть header файлы?
Не хотелось бы перемешивать файлы проекта с файлами библиотеки.
Может, разбить проект как бы контейнеры, где у каждого контейнера есть свои исходные и заголовочные файлы?
project| main| | source| | | *.cpp| | include| | | *.hpp| library1| | source| | | *.cpp| | include| | | *.hpp| library2| | source| | | *.cpp| | include| | | *.hppссылка на канал | ссылка на группу
Dmitry Develop
IMG_20231213_213456.jpg
Как же мне нравится качество китайских товаров.
Подключил я сейчас гирлянду: всё светится, красиво.
А через минуту: хлопок, вспышка, запах гари, чёрный дым идёт из коробочки-контроллера, она перестала работать.
Первым делом я подумал, что в поломке гирлянды виноват сетевой фильтр, который я недавно паял.
Разобрал коробочку, от туда продолжает идти чёрный дым, пахнет чем-то горелым.
Четверть площади платы покрылась копотью.
Я даже и не заметил сразу, что отгорели два провода сетевой вилки.
Зачистил провода, встал на резиновый коврик, вставил вилку в розетку и аккуратно коснулся оголёнными проводами контактов на плате...
Ничего не заискрилось, не хлопнуло, не сгорело и гирлянда засветилась.
При таком сечении провода, без нормального лужения и фиксации провода я не удивлён, что это произошло.
Видимо, пайка провода оказалась самым слабым звеном цепи и поэтому отгорела.
А почему это произошло даже не знаю, наверное, один из сетевых проводов отвалился и что-то замкнул.
Сегодня обойдусь без сложных ремонтов и выбрасывания в мусорку).
ссылка на канал | ссылка на группу
Подключил я сейчас гирлянду: всё светится, красиво.
А через минуту: хлопок, вспышка, запах гари, чёрный дым идёт из коробочки-контроллера, она перестала работать.
Первым делом я подумал, что в поломке гирлянды виноват сетевой фильтр, который я недавно паял.
Разобрал коробочку, от туда продолжает идти чёрный дым, пахнет чем-то горелым.
Четверть площади платы покрылась копотью.
Я даже и не заметил сразу, что отгорели два провода сетевой вилки.
Зачистил провода, встал на резиновый коврик, вставил вилку в розетку и аккуратно коснулся оголёнными проводами контактов на плате...
Ничего не заискрилось, не хлопнуло, не сгорело и гирлянда засветилась.
При таком сечении провода, без нормального лужения и фиксации провода я не удивлён, что это произошло.
Видимо, пайка провода оказалась самым слабым звеном цепи и поэтому отгорела.
А почему это произошло даже не знаю, наверное, один из сетевых проводов отвалился и что-то замкнул.
Сегодня обойдусь без сложных ремонтов и выбрасывания в мусорку).
ссылка на канал | ссылка на группу
Dmitry Develop
image_2023-12-14_15-40-50.png
Можно было сделать и лучше; с параметрами, мне кажется, немного беда.
Зато у меня получилось хорошее именование функций, мне нравится что всё сделано по общему шаблону.
Есть много повторений кода, но как только я пытался вынести общий код в отдельную функцию, а сам алгоритм передавать во внутрь лямбдой, мне всё стало казаться излишним усложнением и неудобным в реализации.
ссылка на канал | ссылка на группу
Зато у меня получилось хорошее именование функций, мне нравится что всё сделано по общему шаблону.
Есть много повторений кода, но как только я пытался вынести общий код в отдельную функцию, а сам алгоритм передавать во внутрь лямбдой, мне всё стало казаться излишним усложнением и неудобным в реализации.
ссылка на канал | ссылка на группу
Dmitry Develop
ссылка на канал | ссылка на группу
Вот что происходит, когда пишешь немаленький проект без включенных предупреждений от компилятора, а потом решаешь включить их и скомпилировать ещё раз.
Просто я немного изменил иерархию проекта и решил заодно ещё и команду сборки переписать.
Надо будет уделить внимание каждому предупреждению и исправить причину его возникновения.
Количеству неиспользованных переменных я не удивлён, в проекте очень много legacy кода.
И это не самый страшный случай.
Хуже всего было только тогда, когда я свой старый игровой движок, код которого был написал под компилятор msvc несколько лет назад, попытался скомпилировать при помощи последнего g++.
Было очень много ошибок и предупреждений, и даже спустя час правок файлов по всему проекту, мне так и не удалось его скомпилировать.
ссылка на канал | ссылка на группу
Просто я немного изменил иерархию проекта и решил заодно ещё и команду сборки переписать.
Надо будет уделить внимание каждому предупреждению и исправить причину его возникновения.
Количеству неиспользованных переменных я не удивлён, в проекте очень много legacy кода.
И это не самый страшный случай.
Хуже всего было только тогда, когда я свой старый игровой движок, код которого был написал под компилятор msvc несколько лет назад, попытался скомпилировать при помощи последнего g++.
Было очень много ошибок и предупреждений, и даже спустя час правок файлов по всему проекту, мне так и не удалось его скомпилировать.
ссылка на канал | ссылка на группу
Dmitry Develop
image_2023-12-16_02-13-50.png
Что делать, если во время отладки в vs code вместо содержимого STL контейнера видна его внутренняя реализация?
На фото выше в порядке сверху вниз: сам код, вид
Надо просто в
Вообще, если разбираться подробнее как это работает, всё довольно сложно.
Похоже, перед представлением данных, gdb или адаптер использует скрипты на python.
ссылка на канал | ссылка на группу
На фото выше в порядке сверху вниз: сам код, вид
std::vector в отладчике до и после изменений. Надо просто в
launch.json добавить "setupCommands", чтобы перед запуском отладки передать в gdb один ключ:// launch.json
{
"version": "0.2.0",
"configurations":
[
{
...
"setupCommands":
[
{
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
...
}
]
}
Вообще, если разбираться подробнее как это работает, всё довольно сложно.
Похоже, перед представлением данных, gdb или адаптер использует скрипты на python.
ссылка на канал | ссылка на группу
Я всегда предпочитал сложный путь лёгкому, стандартному решению — нестандартное, поверхностному изучению — углублённое.
Благодаря этому я уже сейчас знаю или умею то, что другие узнают или научатся только в будущем.
Бывает, решение или совет нужны прямо здесь и сейчас, а времени и навыков самостоятельно разобраться нет.
Поэтому я хочу предложить свою помощь в вопросах, связанных с компилятором mingw (gcc), редактором кода vs code, написания лабораторных работ, программирования на C++, решения проблем с кодировками и другими распространёнными проблемами.
Оказывать кому-то помощь делом или советом не только интересно, но помогает мне набираться опыта и даже немного подзаработать).
Я свой уровень С++ оцениваю где-то между junior и middle: у меня довольно выборочные знания и умения: где-то поверхностные, где-то углублённые.
Поэтому каждый вопрос разбираю индивидуально и помогу, чем смогу.
Буду рад за свою помощь получить вознаграждение.
Оплату принимаю на российскую карту или в криптовалюте.
ссылка на канал | ссылка на группу
Благодаря этому я уже сейчас знаю или умею то, что другие узнают или научатся только в будущем.
Бывает, решение или совет нужны прямо здесь и сейчас, а времени и навыков самостоятельно разобраться нет.
Поэтому я хочу предложить свою помощь в вопросах, связанных с компилятором mingw (gcc), редактором кода vs code, написания лабораторных работ, программирования на C++, решения проблем с кодировками и другими распространёнными проблемами.
Оказывать кому-то помощь делом или советом не только интересно, но помогает мне набираться опыта и даже немного подзаработать).
Я свой уровень С++ оцениваю где-то между junior и middle: у меня довольно выборочные знания и умения: где-то поверхностные, где-то углублённые.
Поэтому каждый вопрос разбираю индивидуально и помогу, чем смогу.
Буду рад за свою помощь получить вознаграждение.
Оплату принимаю на российскую карту или в криптовалюте.
ссылка на канал | ссылка на группу
🤡5
В конце каждого сообщения я добавляю две ссылки: одна на текущее сообщение в канале, другая на группу.
Зачем?
Согласно статистике, все репосты были сделаны анонимно.
То есть без ссылки на канал, откуда оно было переслано, и соответственно, без кнопки комментирования.
Может, кто-то в избранное себе сохранил на всякий случай или с кем-то поделился, но без ссылки на мой канал.
А это немного, но всё же уменьшает количество просмотров потенциально заинтересованных людей.
Ещё одна причина:
Я довольно часто сразу или через несколько часов делаю правки или дополняю текст поста.
Если переслать пост не в виде ссылке, сохранится его копия на данный момент.
Актуальная же версия доступна только по ссылке.
Недавно я задумался, что делать надпись и ссылку довольно громоздко, эта конструкция отвлекает от основного содержимого.
Поэтому в последнем сообщении и в текущем я ради эксперимента сделал новый вид блока и названия ссылок.
Подскажите, какие бы сделать вид блока и названия для ссылок?
"
"
"
"
Названия, скорее всего, в будущем изменятся.
После окончательного выбора вида блока и названий для ссылок, я изменю все остальные сообщения по этому шаблону.
ссылка на канал | ссылка на группу
Зачем?
Согласно статистике, все репосты были сделаны анонимно.
То есть без ссылки на канал, откуда оно было переслано, и соответственно, без кнопки комментирования.
Может, кто-то в избранное себе сохранил на всякий случай или с кем-то поделился, но без ссылки на мой канал.
А это немного, но всё же уменьшает количество просмотров потенциально заинтересованных людей.
Ещё одна причина:
Я довольно часто сразу или через несколько часов делаю правки или дополняю текст поста.
Если переслать пост не в виде ссылке, сохранится его копия на данный момент.
Актуальная же версия доступна только по ссылке.
Недавно я задумался, что делать надпись и ссылку довольно громоздко, эта конструкция отвлекает от основного содержимого.
Поэтому в последнем сообщении и в текущем я ради эксперимента сделал новый вид блока и названия ссылок.
Подскажите, какие бы сделать вид блока и названия для ссылок?
"
канал | группа","
оригинал | обсудить","
Dmitry Develop | обсудить","
ссылка на сообщение | ссылка на обсуждение", ...Названия, скорее всего, в будущем изменятся.
После окончательного выбора вида блока и названий для ссылок, я изменю все остальные сообщения по этому шаблону.
ссылка на канал | ссылка на группу
Dmitry Develop
image_2023-12-18_01-46-05.png
Понимание, каким образом хранятся массивы в памяти и как делать одномерную адресацию многомерного массива и наоборот, позволяет некоторые задачи, данные в которых хранятся в виде одномерного массива, представлять, как многомерный массив.
Посмотрите, как выглядел код до и после изменений: это огромная разница.
Эту символьную таблицу, которая представлена одномерным массивом char с null-терминатором в конце, я представил как массив 3 на 3 ячейки и при помощи цикла сделал её заполнение.
Вывод программы (числа для примера только):
Кому не особо понятно, почитайте тут объяснение про массивы и память:
https://t.me/a248640developchat/1029
ссылка на канал | ссылка на группу
Посмотрите, как выглядел код до и после изменений: это огромная разница.
Эту символьную таблицу, которая представлена одномерным массивом char с null-терминатором в конце, я представил как массив 3 на 3 ячейки и при помощи цикла сделал её заполнение.
Вывод программы (числа для примера только):
| sorted | shuffled | unsorted bubble | 1999990 ms | 4999993 ms | 7999996 ms shaker | 2999991 ms | 5999994 ms | 8999997 msselection | 3999992 ms | 6999995 ms | 9999998 msКому не особо понятно, почитайте тут объяснение про массивы и память:
https://t.me/a248640developchat/1029
ссылка на канал | ссылка на группу
👍2
Media is too big
VIEW IN TELEGRAM
Как вам консольное меню?)
Меню многоуровневое с проверкой на корректный ввод.
Весь проект вышел в 700 строк кода.
ссылка на канал | ссылка на группу
Меню многоуровневое с проверкой на корректный ввод.
Весь проект вышел в 700 строк кода.
ссылка на канал | ссылка на группу
🔥2
Dmitry Develop
image_2023-12-20_04-03-51.png
Сегодня я с столкнулся с проблемой правильного отображения строк в кодировке windows-1251 во время отладки в vs code.
Как я понял, vs code корректно отображает строки только в кодировке utf-8, а в моей программе строки закодированы в windows-1251.
На фото в жёлтой рамке сверху в низ: отображение до и после изменений.
Если кодировки по-умолчанию для программы, отладчика и широких строк не подходят, у gdb есть следующие команды:
Устанавливает кодировку, которую использует программа для
Устанавливает кодировку, которую будет использовать gdb во время отладки:
Устанавливает кодировку как для
Устанавливает кодировку, которую использует программа для типов
Выводит текущие используемые кодировки:
Если у команды опустить аргумент с кодировкой, отладчик выведет список поддерживаемых для данной команды.
Если кодировки разные, отладчик попытается преобразовать данные из одной в другую.
В моём случае нужны такие настройки:
Как временное решение эти команды можно вводить в консоли отладки начиная с "
Каждый раз вручную вводить команды неудобно, поэтому лучше их указать в
ссылка на канал | ссылка на группу
Как я понял, vs code корректно отображает строки только в кодировке utf-8, а в моей программе строки закодированы в windows-1251.
На фото в жёлтой рамке сверху в низ: отображение до и после изменений.
Если кодировки по-умолчанию для программы, отладчика и широких строк не подходят, у gdb есть следующие команды:
Устанавливает кодировку, которую использует программа для
char: set target-charset XУстанавливает кодировку, которую будет использовать gdb во время отладки:
set host-charset XУстанавливает кодировку как для
target-charset, так и для host-charset: set charset XУстанавливает кодировку, которую использует программа для типов
wchar_t: set target-wide-charsetВыводит текущие используемые кодировки:
show charsetЕсли у команды опустить аргумент с кодировкой, отладчик выведет список поддерживаемых для данной команды.
Если кодировки разные, отладчик попытается преобразовать данные из одной в другую.
В моём случае нужны такие настройки:
set host-charset UTF-8set target-charset CP1251Как временное решение эти команды можно вводить в консоли отладки начиная с "
-exec ".Каждый раз вручную вводить команды неудобно, поэтому лучше их указать в
launch.json.// launch.json
{
"version": "0.2.0",
"configurations":
[
{
...
"setupCommands":
[
// {
// "text": "set charset UTF-8"
// "ignoreFailures": true
// },
// {
// "text": "set target-wide-charset UTF-16"
// "ignoreFailures": true
// },
{
"text": "set target-charset CP1251"
"ignoreFailures": true
},
{
"text": "set host-charset UTF-8"
"ignoreFailures": true
}
]
...
}
]
}
ссылка на канал | ссылка на группу
Dmitry Develop
ссылка на канал | ссылка на группу
Потихоньку закупаюсь новыми инструментами и радиокомпонентами.
Всё пришло очень быстро).
> Результат выпаивания радиокомпонента полыми трубками
Правда иногда мешает высокая теплоёмкость платы и высокая температура плавления припоя.
Надо бы себе ещё сплав Розе купить.
ссылка на канал | ссылка на группу
Всё пришло очень быстро).
> Результат выпаивания радиокомпонента полыми трубками
Правда иногда мешает высокая теплоёмкость платы и высокая температура плавления припоя.
Надо бы себе ещё сплав Розе купить.
ссылка на канал | ссылка на группу