LINUX.ORG.RU

Библиотека исключений

 , ,


0

1

Всем привет. Есть ли сабжевая библиотека в составе стандартной библиотеки С++?

Иначе, могу ли я стандартно с помощью try/catch отловить деление на ноль, ошибки доступа к файлам и т.д.?

Все спасибо.

★★★★★

Последнее исправление: cetjs2 (всего исправлений: 1)

отловить деление на ноль

исключение тут не бросается

ошибки доступа к файлам

использовать fstream

Reset ★★★★★
()
Ответ на: комментарий от LongLiveUbuntu

В go возврат кода ошибки весьма органично смотрится, так как из функции можно вернуть несколько результатов не прибегая к помощи указателей.

EDIT: да, только там возвращается не код ошибки, а объект с интерфейсом {Error() string}, который можно сразу засунуть в принт.

PolarFox ★★★★★
()
Последнее исправление: PolarFox (всего исправлений: 1)
Ответ на: комментарий от LongLiveUbuntu

Но зачем ты делишь на ноль?

anonymous
()
Ответ на: комментарий от LongLiveUbuntu

И отловить никак?

sigaction + SIGFPE, но ловить исключения от деления на 0 вместо проверок в коде - это мягко говоря странно

wota ★★
()
Ответ на: комментарий от wota

ловить исключения от деления на 0 вместо проверок в коде - это мягко говоря странно

Код бывает чужой и без исходников

AF ★★★
()
Ответ на: комментарий от AF

Код бывает чужой и без исходников

тогда авторам пишется письмо и они сами чинят в кратчайшие сроки, если не чинят - идут лесом

wota ★★
()
Ответ на: комментарий от wota

если не чинят - идут лесом

А за ними в лес пойдет твой заказчик с баблом, которому плевать на все эти внутрение разборки.

AF ★★★
()
Ответ на: комментарий от AF

А за ними в лес пойдет твой заказчик с баблом, которому плевать на все эти внутрение разборки.

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

wota ★★
()
Ответ на: комментарий от wota

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

AF ★★★
()
Ответ на: комментарий от AF

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

кажется я понял, ты фрилансер?

wota ★★
()
Ответ на: комментарий от wota

кажется я понял, ты фрилансер?

А какая разница фрилансер я или нет? На постоянной работе за нефиг делать может быть такой расклад:

Менеджер (М): нам надо сделать фичу N,

Девелопер (Д): я знаю библиотеку, она эту фичу умеет, я ее прикручу за неделю.

М: круто! делай!

Через неделю.

Тестировщик (Т): пацаны, все вроде ок, но фича N крешится при таких-то начальных данных.

Д: Я проверил, бага в библиотеке.

М: за скоко поправишь?

Д: так ты на лицензии сэкономил, нам исходников не дали, поправить немогу.

М: Бля, бюджет то не резиновый! Сделай хоть так, чтобы не падало. А то я программу уже продал, надо на след. неделе релиз выкатывать иначе не видать нам бабла. А поправим в следущей версии.

Д: ну я могу ексепшен перехватить и сообщение вывести...

М: сколько времени надо?

Д: ну завтра сделаю.

М: круто, делай!

Вот так оно в реальной жизни зачастую и бывает.

AF ★★★
()
Ответ на: комментарий от LongLiveUbuntu

А как быть с вещественной арифметикой?

Что-то типа такого:

eps = 0.0001; // допустимая точность
if abs(val) < eps {
   cout << "Деление на ноль, идите лесом";
} else {
   cout << x / val;
}
provaton ★★★★★
()
Ответ на: комментарий от provaton

Кстати, а почему это никто не вспомнил, что явная проверка на 0 в делителе - это таки лишние такты процессора?

А вот вариант с есепшеном будет работать намного быстрее.

AF ★★★
()
Ответ на: комментарий от AF

А эксепшн откуда выбросится? В процессоре есть встроенный телепатический аппарат, прозревающий, будет деление на ноль или не будет?

provaton ★★★★★
()
Ответ на: комментарий от provaton

А эксепшн откуда выбросится? В процессоре есть встроенный телепатический аппарат, прозревающий, будет деление на ноль или не будет?

Не буду говорить за все платформы, но на х86 такие есть!

AF ★★★
()
Ответ на: комментарий от AF

А какая разница фрилансер я или нет?

просто к «длинному» проекту отношение другое, а так ничего плохого про фрилансеров сказать не могу

так ты на лицензии сэкономил, нам исходников не дали

вот тут была ошибка, завязываться на чужую закрытую библиотеку без поддержки не стоит, в крайнем случае можно эту самую поддержку купить, да - часто это стоит дорого (с чем я работал - 0.5млн$ в год), но при разумном подходе полностью себя оправдывает

wota ★★
()
Ответ на: комментарий от LongLiveUbuntu

Проверки в коде можно сделать только для целых типов. А как быть с вещественной арифметикой?

можно плз подробнее - конкретная операция и желаемое поведение

wota ★★
()

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

Я же ввожу в гугль c++ exceptions и немного недоумеваю...

ados ★★★★★
()
Ответ на: комментарий от wota

вот тут была ошибка...

Ну так прикинь, менеджеры тоже живые люди, и тоже могут совершать ошибки. Пусть и не в такой простой ситуации, как в приведенном примере.

Тут вопрос как бы в другом. Вот что делать, если кто-то таки накосячил, а исправлять ошибку долго/дорого?

AF ★★★
()
Ответ на: комментарий от AF

Вот что делать, если кто-то таки накосячил, а исправлять ошибку долго/дорого?

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

wota ★★
()
Ответ на: комментарий от wota

Простейший случай - вычисление отношения очень большой величины к очень маленькой. Например случай решения плохо обусловленной СЛАУ (те же задачи мат. моделирования).

Да, я в курсе о неявных методах решения СЛАУ, но всех случаев не предусмотреть.

LongLiveUbuntu ★★★★★
() автор топика
Ответ на: комментарий от LongLiveUbuntu

Простейший случай - вычисление отношения очень большой величины к очень маленькой

а разве тут поведение Java и C++ не идентично? (+inf)

wota ★★
()
Ответ на: комментарий от wota

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

Ну так если ошибка возникает на каждом втором запуске программы, то фиг ты кому ее напаришь. А если на каждом тысячном, то почему нет? Ексепшены - это не панацея. Это инструмент. Иногда использование этого инструмента оправдано, а иногда нет.

AF ★★★
()
Ответ на: комментарий от anonymous

Надо было говорить 3 недели. ССЗБ.

Д: ну я могу ексепшен перехватить и сообщение вывести...
М: сколько времени надо?
Д: ну завтра сделаю.

он не так прост ;)

wota ★★
()
Ответ на: комментарий от AF

Вот что делать, если кто-то таки накосячил, а исправлять ошибку долго/дорого?

будем считать, что ты сам же и ответил:

Ну так если ошибка возникает на каждом втором запуске программы, то фиг ты кому ее напаришь. А если на каждом тысячном, то почему нет?

wota ★★
()
Ответ на: комментарий от LongLiveUbuntu

С вещественной проще. Там можно выставлять режимы сопроцессора и вместо sigfpe у тебя будет возникать nan, inf и прочие вещи.

Reset ★★★★★
()
Ответ на: комментарий от LongLiveUbuntu
auto dlimits = numeric_limits<double>();
double r = dlimits.max() / dlimits.min();
if(r==dlimits.infinity())
    cout << "Infinity\n";
wota ★★
()
Ответ на: комментарий от Gorthauer

,

Любой руководитель, сам разбирающийся в этой кухне.

назови закрытые библиотеки, которые ты используешь без купленной поддержки

wota ★★
()
Ответ на: комментарий от Gorthauer

т.е. ты не относишься к тем «кто вместо решения проблем лепит костыли поверх чужого кода, т.к. не может запросить исправление или добавление фичи», но поддерживаешь их? или что ты хотел сказать?

wota ★★
()
Ответ на: комментарий от Gorthauer

Я пользуюсь открытыми проектами и привык править в них баги напрямую.

аналогично, тогда еще раз спрошу - что ты хотел сказать?

wota ★★
()
Ответ на: комментарий от wota

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

Gorthauer ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.