Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
820 / 579 / 75
Регистрация: 20.09.2014
Сообщений: 3,820

А может есть Safe C/C++?

27.03.2025, 19:02. Показов 7907. Ответов 74
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я не совсем уж конченный начинающий в C/C++, думаю, уровень мидла, скорее, - за счёт знания других языков и опыта разработки разных проектов. В общем просто привела меня судьба в эмбеддинговые системы и язык С/С++. Arduino, ESP32 и всё такое.

Вот я уже почти год пинаю первый свой проект, он уже почти закончен. Основной вердикт - задолбало отстреливание своих конечностей. Я могу неделю искать причину неработоспособности и случайного сбоя.

Моё предложение - создать отладочный вариант языка С/С++, который будет безопасным, но листингово-совместимым с обычным C/C++. То есть сначала работаешь в Safe C/C++, который медленный, но контролирует выход указателя за пределы массива, пишет логи разных уровней и всё такое. Как только убеждаешься, что всё работает, то отключаешь логи и контроль. Если бы можно было писать отдельные части кода на Safe C/C++, другие - на оригинальных языках C/C++ - это вообще атас!
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.03.2025, 19:02
Ответы с готовыми решениями:

Секундомер и thread-safe
В моей программе мне нужно отслеживать время по секундам. Я сделал следующее: создал доп. поток, в котором вызывается методом с телом: ...

thread-safe ли?
Насколько я понимаю, для х32 процессоров атомарными операциями не являются те, что с double/long long, для х64 же и они атомарны. Если я...

Thread-safe ли чтение структур?
Собственно, безопасно ли нескольким потокам одновременно читать значение глобальной переменной, если она не влазит в примитивный тип?

74
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,601
27.03.2025, 22:07
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от alecss131 Посмотреть сообщение
у ржавчины на нашем форуме ситуация не сильно лучше
потому что это форум школоты. Не думаю, что в какой-то постсоветской школе, препод с менталитетом 20 века будет обучать Rust...
Но в моей стране Rust популярен и есть вакансии. Используется в топовых корпорациях.
А вот Kotlin в рейтингах упал. Java в разы на лучших позициях.
https://www.tiobe.com/tiobe-index/
Java - 3-е место и растет дальше
Kotlin - 19, причем с отрицательным коэффициентом изменения - т.е. язык падает ко дну)
Даже Rust впереди котлина.
0
820 / 579 / 75
Регистрация: 20.09.2014
Сообщений: 3,820
28.03.2025, 09:07  [ТС]
Цитата Сообщение от Alex1126 Посмотреть сообщение
Раз речь про андурино, значит этот скорее всего микроконтроллер, а там экрана нет, сообщения об ошибке не выводятся
Нет, вот такой комбайн с дисплеем, внутренней и внешней флэшкой, вайфаем, RS485 и CAN:
https://www.waveshare.com/wiki... ouch-LCD-7

Программируется в Arduino IDE в том числе.
0
Модератор
Эксперт Java
 Аватар для alecss131
2895 / 1401 / 412
Регистрация: 11.08.2017
Сообщений: 4,488
Записей в блоге: 2
28.03.2025, 10:52
Цитата Сообщение от Mikhaylo Посмотреть сообщение
Arduino IDE
От этого г надо отказываться в первую очередь. По функционалу не лучше блокнота. Советую обратить внимание на Platformio
С хорошей IDE проще писать код, а то в используемом даже не подебажить и нету ничего вообще удобного.
0
820 / 579 / 75
Регистрация: 20.09.2014
Сообщений: 3,820
28.03.2025, 11:02  [ТС]
Перейти на платформио с наработанной кодовой базой трудно?
0
274 / 206 / 31
Регистрация: 26.11.2022
Сообщений: 891
28.03.2025, 11:34
Напортачить и сделать неработающий код можно на любом языке и это не проблема языка.
мы так и не увидели что же за код вызвал такие трудности в отладке.
А это как раз самое интересное.
Ибо надо искать причины и разбираться с ними.
И по ходу дела нарабатывать опыт и навыки решения типовых трудностей конкретной платформы.

А попытки переложить ответственность за неработающий код на язык не позволит програмисту совершенствоваться.
1
 Аватар для Pphantom
2469 / 1615 / 741
Регистрация: 17.03.2022
Сообщений: 5,267
28.03.2025, 11:42
Цитата Сообщение от Aledveu Посмотреть сообщение
А попытки переложить ответственность за неработающий код на язык не позволит програмисту совершенствоваться.
Ну вообще-то желание найти язык, устройство которого позволяет эффективнее ловить ошибки, вполне естественно. Другое дело, что конкретно при создании C цели были фактически диаметрально противоположными, а C++ все же многое от C "унаследовал".
0
47 / 39 / 10
Регистрация: 25.02.2025
Сообщений: 84
28.03.2025, 11:56
В C++ безопасно работать с массивами array и vector, если использовать метод at.
0
фрилансер
 Аватар для Алексей1153
6500 / 5731 / 1133
Регистрация: 11.10.2019
Сообщений: 15,335
28.03.2025, 12:09
NotAbug, и ловить исключения Очень весело
0
47 / 39 / 10
Регистрация: 25.02.2025
Сообщений: 84
28.03.2025, 12:12
Для программирования одноплатных компьютеров лучше использовать кросс-компиляцию.

Добавлено через 2 минуты
>ловить исключения Очень весело

для этого try/catch и сделаны
0
274 / 206 / 31
Регистрация: 26.11.2022
Сообщений: 891
28.03.2025, 12:17
NotAbug, при программировании встраиваемых систем исключения абсолютно бесполезны.
данные отправленные в оборудование вы автоматически не вернёте.
поэтому когды вы ловите исключение вы получаете оборудование находящееся в неизвестном состоянии и единственное что можно сделать - это сброс.
0
47 / 39 / 10
Регистрация: 25.02.2025
Сообщений: 84
28.03.2025, 12:29
>единственное что можно сделать - это сброс

надо же аккуратно всё перехватывать. Сначала всё тщательно отладить на хост-системе. Когда возникает неперехваченное исключение внутри кода, его перехватит обработчик в main и выведет сообщение, по крайней мере ошибки не останутся незамеченными. А если ошибки возвращать в виде кодов, то есть опасность не заметить что ошибка не была обработана.
0
фрилансер
 Аватар для Алексей1153
6500 / 5731 / 1133
Регистрация: 11.10.2019
Сообщений: 15,335
28.03.2025, 13:35
Цитата Сообщение от NotAbug Посмотреть сообщение
для этого try/catch и сделаны
.at , try/catch - это всё лишние накладные расходы, удар по быстродействию, засорение текста кода.
0
274 / 206 / 31
Регистрация: 26.11.2022
Сообщений: 891
28.03.2025, 14:20
Цитата Сообщение от NotAbug Посмотреть сообщение
надо же аккуратно всё перехватывать.
ну расскажите как вы аккуратно перехватите исключение в процессе конфигурирования какой-нибудь внешней микрухи, которая могла задуматься или от помех зависнуть ))

Или ещё круче - в обработчике прерываний вы вызвали чью-то функцию (написанную программистом любителем новомодных исключений), а она дала исключение )) что же там будет?
0
47 / 39 / 10
Регистрация: 25.02.2025
Сообщений: 84
28.03.2025, 16:18
>ну расскажите

Рассказываю: для программирования микроконтроллеров и DSP я против использования высокоуровневых языков, там только язык ассемблера. А вот на одноплатных компьютерах с операционной системой вполне можно использовать C или Ada. Вот в статье хвалят Аду для встроенных систем:
https://habr.com/ru/articles/549688/

Насчёт C++ - я не пробовал, но у меня есть книги Майа Пош "Программирование встроенных систем на C++ 17" и Мякишев Д.В. "Принципы и методы создания надёжного программного обеспечения АСУТП", так там очень рекомендуют C++.
0
820 / 579 / 75
Регистрация: 20.09.2014
Сообщений: 3,820
28.03.2025, 17:59  [ТС]
Парни, извините, я думаю об одном, а пишу о другом. (Наверное я так и программирую.)

Моя мысль заключается в том, чтобы использовать возможности C/C++, чтобы создать безопасные перегруженные функции и операторы вместо опасных. И переключать их с помощью DEBUG 0/1. То есть нужна Safe-библиотека, а не новый язык. Не так кардинально, господа. Не надо Rust/Go/MISRA C.

Добавлено через 15 минут
Цитата Сообщение от Aledveu Посмотреть сообщение
мы так и не увидели что же за код вызвал такие трудности в отладке.
Я думаю это неважно. У меня очень так много задач, что я не могу позволить себе анализировать постоянно, где может произойти сбой. Я могу вывалить вам на головы этот код, он делает многое в этом комбайне. Но зачем? Я лучше покажу это всё искусственному интеллекту (что я и делаю). Но я хочу что-то поэффективнее.
0
 Аватар для Azathtot
754 / 351 / 90
Регистрация: 07.01.2023
Сообщений: 1,451
28.03.2025, 19:26
Цитата Сообщение от Mikhaylo Посмотреть сообщение
покажу это всё искусственному интеллекту (что я и делаю)
Да.... он вам "насоветует". Ошибок будет еще больше.
Цитата Сообщение от Mikhaylo Посмотреть сообщение
У меня очень так много задач, что я не могу позволить себе анализировать постоянно, где может произойти сбой.
Значит вы не за те задачи беретесь. Хороший эмбедщик задачу "компилирует и исполняет" в уме, и вопросы "анализировать" встаю ну очень редко. Особенно если не увлекаться бегемотами (Arduino).
Цитата Сообщение от Mikhaylo Посмотреть сообщение
чтобы создать безопасные перегруженные функции и операторы вместо опасных
А вот это как? Что есть "безопасная функция"? Со стек чекингом, поиском утечек памяти? Если да, то куда весь этот выхлоп итди должен? На JTAG? На DebugWire?
1
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
28.03.2025, 20:52
Вот это у людей проблемы. Mikhaylo, я за вас искренне рад.

Добавлено через 7 минут
По сути вопроса.
Выбор ЯП для вас ограничен. Под конкретную задачу доступен ограниченный набор ЯП и иногда даже IDE.
Второе. Что в Си, что в С++, да и это относится и к большинству других ЯП. Вы как кодер, должны выработать набор техник и правил написания кода. А не каждый раз выдумывать велосипед.

Вот вам подкинули MISRA. Отличный вариант.
Misra C++ 2008 поддерживает масса статических анализаторов.

Думаю вам нужно снять розовые очки по типу:
Цитата Сообщение от Mikhaylo Посмотреть сообщение
А может есть Safe C/C++?
Такого не существует.
0
820 / 579 / 75
Регистрация: 20.09.2014
Сообщений: 3,820
29.03.2025, 01:51  [ТС]
Цитата Сообщение от Azathtot Посмотреть сообщение
Да.... он вам "насоветует". Ошибок будет еще больше.
Сразу видно, что вы им не пользовались)))

Добавлено через 1 минуту
Цитата Сообщение от SmallEvil Посмотреть сообщение
Думаю вам нужно снять розовые очки
Вы не очень поняли поставленную задачу. Не надо никакого нового языка. Прочитайте мои сообщения на последней странице.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
29.03.2025, 02:56
Цитата Сообщение от Mikhaylo Посмотреть сообщение
Вы не очень поняли поставленную задачу.
Цитата Сообщение от Mikhaylo Посмотреть сообщение
Не надо никакого нового языка.
Может он и нужен, но это отдельная тема.

Цитата Сообщение от Mikhaylo Посмотреть сообщение
Моя мысль заключается в том, чтобы использовать возможности C/C++, чтобы создать безопасные перегруженные функции и операторы вместо опасных.
MISRA именно для этого и создана.
Вы можете как угодно себя обезопасить и подстраховывать.
Создать кучу оберток. Налепить шаблонов нагрузив этап компиляции.
Использовать статический анализатор, что бы он подсказал вам где вы делаете "не по фен шую".
Но в итоге ответственность ложится на вас.

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

Цитата Сообщение от Mikhaylo Посмотреть сообщение
Вы не очень поняли поставленную задачу.
Скорее всего.

Добавлено через 4 минуты
Но давайте оставим сферических коней в покое и вернемся к нашим квадратным баранам.
Ошибки рантайм ложатся ВСЕГДА на программиста.
С тем же вылетом за пределы массива.
Почему у вас вдруг вылет? - Потому что вы не сделали проверку.
Банально. Вопрос, почему?
И так далее.

Добавлено через 6 минут
Цитата Сообщение от Mikhaylo Посмотреть сообщение
И переключать их с помощью DEBUG 0/1
Какое то дикое дежавю с assert
0
Эксперт .NET
 Аватар для Usaga
14727 / 9501 / 1362
Регистрация: 21.01.2016
Сообщений: 35,829
29.03.2025, 03:08
Цитата Сообщение от Mikhaylo Посмотреть сообщение
Моя мысль заключается в том, чтобы использовать возможности C/C++, чтобы создать безопасные перегруженные функции и операторы вместо опасных.
Хм. А не рассматривается вариант подтянуть свои скилы, чтобы в твоих руках все функции стали безопасными? Мне кажется, что это продуктивнее будет, чем городить эрзац-язык поверх С++.

Добавлено через 4 минуты
Более того, насколько я знаю в С++ уже напихано разных механизмов для обезопасевания своих ног от прострела. Другое дело, что это всё надо ещё освоить.

А ты предлагаешь язык ещё больше расширить? Чтобы новые механизмы тоже не освоить?)))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.03.2025, 03:08

Vector и thread-safe
Как лучше сделать свой класс типа контейнер шаблонный как вектор который будет ещё и thread-safe. Допустим есть обычный класс внутри вектор...

Thread-safe smart pointer
Нужно мне это для реализации COW механизма. В STL, насколько я понимаю, shared_ptr такого не может дать. Однако, покопавшись в...

Что такое thread safe?
Всем добрый день! Вопрос, собственно, в имени темы.:) Что это такое? Я так понимаю, что переменная не меняет значения при...

Возможно ли как-то в Visual Studio 2010 проверять есть ли утечки памяти? Может есть какие-то специальные плагины для этого?
Название темы отражает суть вопроса.

Где найти Двунаправленное кольцо? У кого есть такое? Или есть ссылки где их можно найти?
Можете пожалуйста скинуть примеры задач с Двунаправленным кольцом, или хотябы где их искать. Буду очень благодарен!!!!!!!


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru