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

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

29.04.2016, 17:31. Показов 21373. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Свет внутри себя
kumehtar 07.06.2026
Пусть это будет здесь lIs4oanZS9Y
Программа для com-порта
Uhbif79 05.06.2026
Всем привет, давно хотел изучить Qt, начинал, бросал, потом снова начинал. И сейчас вот смог написать свою первую программу. До этого имел опыт программирования микроконтроллеров, писал прошивки на. . .
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
21 мат мед. Планы на развитие модели здравоСохранения
anaschu 01.06.2026
AnyLogic: план развития симуляционной модели рабочего коллектива — динамический абсентеизм, реальные данные, три сценария сравнения Продолжаю серию постов о дискретно-событийной модели рабочего. . .
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru