Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.71/103: Рейтинг темы: голосов - 103, средняя оценка - 4.71
 Аватар для AnastasiaSX
53 / 31 / 4
Регистрация: 19.12.2013
Сообщений: 170

Обработка любых исключений в try catch на C++ также как на C#

29.04.2016, 17:31. Показов 21183. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть ли возможность обрабатывать все ошибки в программе на C++, точно также как это сделано на C#?

На C# просто помещаешь текст программы в try catch и все, если будут ошибки программа не упадет и скажет что не так.

C#
1
2
3
4
5
6
7
8
try
{
    // тут просто текст программы, в котором не нужно следить где может возникнуть ошибка
}
catch (Exception e)
{
    Console.WriteLine("Ошибка:" + e.Message);
}
на C++ приходится проверять места где может быть ошибка, вот например при делении на ноль.
C++
1
2
3
4
5
6
7
8
9
10
11
12
try
{
    float a = 0;
    if(!a) throw "Divide by zero";
 
    float b = 10 / a;
    printf ("b = %f", b);
}
catch (const char *e)
{
   printf("Error: %s", e);
}
Вопрос: Есть ли возможность без всяких проверок написать код и взять его в try catch чтобы при любой проблеме программа не падала и говорила что не так? Просто все места где будет проблема заранее нельзя учесть и хотелось бы на этом не заморачиваться, пусть программа сама следит за ошибками и говорит что не так.

Была идея вот так сделать, но этот способ не работает, программа просто падает :

C++
1
2
3
4
5
6
7
8
9
10
11
try
{
    float a = 0;
    
    float b = 10 / a;
    printf ("b = %f", b);
}
catch (...)
{
   printf("Error");
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.04.2016, 17:31
Ответы с готовыми решениями:

Как на vb.net делается обработка исключений try catch?
как на vb.net делается обработка исключений try catch ? например System.ArgumentException Добавлено через 3 минуты на C# было бы...

Обработка исключений try catch
Здравствуйте. Программа с использованием CLR. Суть работы очень проста - в три TextBox'а вводятся числа, они сравниваются. Результат...

try, throw, catch...обработка исключений
помогите разобраться с обработкой исключений...при вводе пароля больше 10 символов должна быть непредвиденная ошибка, пытаюсь ее поймать,но...

24
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
01.05.2016, 23:24
Лучший ответ Сообщение было отмечено AnastasiaSX как решение

Решение

Студворк — интернет-сервис помощи студентам
Цитата Сообщение от AnastasiaSX Посмотреть сообщение
Пока вижу только один вариант решения проблемы: это компилировать в MS Visual Studio поставив параметр компиляции /EHa.
на с++ вам нужно смотреть в строну эксепшенов,
seh эксепшенов,
и сигналов.

при этом нужно иметь ввиду:
все очень платформо-зависимое.

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

например, под линуксом мне удавалось поймать сигнал,
вызванный делением на ноль.

под windows xp - нет.
и пришлось ловить эту ситуацию при помощи seh.

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

ну и напоследок:
не знаю, чем именно вы там занимаетесь,

но если требование к надежности ПО:
максимальная отказоустойчивость
(сбой может угрожать жизни, либо имуществу человека),
тогда я категорически не рекомендую вам играть в такие игры.

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

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

нельзя позволить такому процессу сделать ещё один шаг,
и наломать дров.

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

если у самолета откажет двигатель,
он сможет лететь на аварийном.

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

Добавлено через 8 минут
Цитата Сообщение от AnastasiaSX Посмотреть сообщение
важность обрабатываемых данных очень высокая и если они будут утеряны это большая проблема.
данные небольшими порциями,
как по конвейеру передаются от одного процесса к другому.
при этом, пока процесс-получатель не подтвердит успешную обработку,
процесс-отправитель не удаляет свою копию исходных данных.

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

система устроенная по принципу:
пока жива хотя бы одна машина,
на которой жив хотя бы один процесс,
он должен суметь запустить аварийное оборудование,
и вновь поднять все необходимые
для функциональности системы компоненты.
5
01.05.2016, 23:25

Не по теме:

C++
1
2
float a = 0;
float b = 10 / a;
А разве b не станет равной 1.#Inf?

0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
01.05.2016, 23:54
Цитата Сообщение от Renji Посмотреть сообщение
Но 50 на 50 это значительно лучше чем 0.
Да. А цена - потеря возможности диагностировать и исправить ошибку.
0
 Аватар для AnastasiaSX
53 / 31 / 4
Регистрация: 19.12.2013
Сообщений: 170
03.05.2016, 00:01  [ТС]
Данные обрабатываются порциями, как описал hoggy, если порция данных обработана без ошибок приступаем к следующей порции, но если ошибка, есть два пути:
1) просто пропустить эту порцию данных, будет дырка в данных но останавливать программу нельзя (такая программа есть и уже случаи ошибок были, т.к. программа не упала и сказала что были проблемы с обработкой такого-то блока данных ошибку исправила и до конца дня программа доработала и проблем не было)
2) закончить обработку данных последний фрагмент просто отбросить.

mat_for_c, да при делении на ноль как в примере будет бесконечность, но если в переменных поменять тип допустим на int, то при делении на ноль будет ошибка.

Убежденный, если грамотно обработать исключение то диагностировать ошибку можно и без синих экранов смерти и без падения программы.
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
03.05.2016, 10:22
Цитата Сообщение от AnastasiaSX Посмотреть сообщение
если грамотно обработать исключение
Пример грамотной обработки AV/stack overflow/heap corruption/etc - в студию!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.05.2016, 10:22
Помогаю со студенческими работами здесь

Обработка исключений Конструкция try.catch.finally
Добрые день, помогите пожалуйста Вводится время в текстбоксе(например 22:23) и в отдельном текстбоксе вводятся минуты Вывести какое...

try catch в методе класса, обработка исключений
Доброго времени суток! Есть задание реализовать Очередь, с обработчиком исключений. Сама очередь работает корректно, но я никак не...

Обработка исключений try - catch при сканировании каталога
Напишите программу, которая сканирует некоторую папку (задаётся пользователем) с учётом поддиректорий, все хранящиеся в ней файлы...

Обработка некорректного ввода, используя механизм исключений и блок Try-Catch
Есть код Нужно сделать так, что бы после некорректного ввода(например System.FormatException или System.OverflowException и тд )...

Обработка исключений: что такое исключение и для чего нужен catch
1.Что такое исключение? В роли исключения выступает ошибка времени выполнения. Имеется ли в виду ошибка во время выполнения? 3.Каковы...


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

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru