| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > тип сгенерированого исключения |
| Автор: rukudias 18.9.2008, 16:32 | ||
| Привет Всем! есть код
Вопрос какого типа буд сгенерировано исключение! |
| Автор: vinter 18.9.2008, 16:44 |
| рискну предположить, что никакого. Будет крах и не более. |
| Автор: rukudias 18.9.2008, 16:54 |
| таки да! НО почему компилятор не отлавливает эту ситуйовицу? |
| Автор: vinter 18.9.2008, 17:18 |
| а зачем такое ловить? это потенциально бесполезное действие.. А компилятору лишний гемморой, все таки программы пишут программисты, а не домохозяйки |
| Автор: rukudias 18.9.2008, 17:36 | ||
|
| Автор: vinter 18.9.2008, 17:41 |
| rukudias, угу, я даже могу угадать что словит внешний catch Короче тебе лучше почитать про исключения, throw; в catch это повторная генерация исключения. |
| Автор: J0ker 18.9.2008, 17:53 |
| не нао бредить господа есть такое понятие, как стандарт: 15.1 "A throw-expression with no operand rethrows the exception being handled. The exception is reactivated with the existing temporary; no new temporary exception object is created. The exception is no longer considered to be caught; therefore, the value of uncaught_exception() will again be true." и далее: "15.5.1 The terminate() function In the following situations exception handling must be abandoned for less subtle error handling techniques: ---------- покатано ------------------- — when a throw-expression with no operand attempts to rethrow an exception and no exception is being handled (15.1)" |
| Автор: rukudias 18.9.2008, 18:08 |
| можно на русский |
| Автор: vinter 18.9.2008, 18:27 |
а где что сказано не так? |
| Автор: vinter 18.9.2008, 19:33 |
| J0ker, ну и где там написано, что на это должен реагировать компилятор? terminate() срабатывает, но эжто время выполнения, а не время компиляции. З.Ы Компилятор никому ниче не должен, поэтому стандарт полностью не соблюдается нигде(насколько я знаю), так , что уповать на стандарт не стоит. |
| Автор: rukudias 18.9.2008, 19:58 |
| Респект и уважуха! ЗЫ кинь сцылку на стандарты |
| Автор: J0ker 18.9.2008, 20:09 | ||||
1. компилятор ни на что не реагирует - он объктный код генерирует 2. обработка исключений (в том числе и вызов terminate()) разрешается на этапе компиляции 3. компилятор ОБЯЗАН соответствовать cтандарту. Несоответствие стандарту является багом. Компилятор может обрабатывать некоторые расширения, которые не противоречат стандарту. Вы знаете не правильно. Добавлено через 9 минут и 11 секунд
http://www.usatlas.bnl.gov/~dladams/cpp/INCITS+ISO+IEC+14882-2003.pdf напоминаю, что на подходе новый стандарт: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2705.html |
| Автор: UnrealMan 18.9.2008, 20:35 | ||||
Потому что это имело бы смысл только для main.
Добавлено через 36 секунд
|
| Автор: J0ker 18.9.2008, 20:57 |
нет, не поэтому это не ошибка максимум что разрешается сделать в этом случае компилятору - выкинуть ворнинг |
| Автор: Alek86 18.9.2008, 22:05 |
а кто запретит main вызывать в catch блоке? так что это вообще не имело бы смысла |
| Автор: vinter 18.9.2008, 22:28 | ||
жжошь да никому он ничем не обязан ;) Добавлено через 1 минуту и 25 секунд ок, назови мне компилятор полностью соответсвующий стандарту, только не лабороторный а реальный. |
| Автор: J0ker 18.9.2008, 22:50 | ||||||||
смысл вашего пассажа остался для меня загадкой
вы не поняли - это не спор - это факт - я вас просто информирую
любой компилятор заявленный как standard compliant любые несоответствия стандарту в таком компиляторе являются багами |
| Автор: MTWizard 18.9.2008, 23:03 |
main() по стандарту нельзя вызывать (не помню пункта) |
| Автор: UnrealMan 19.9.2008, 01:51 |
3.6.1 Main function |