Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.83.87.94] |
|
Страницы: (37) « Первая ... 34 35 [36] 37 ( Перейти к последнему сообщению ) |
Сообщ.
#526
,
|
|
|
Цитата Qraizer @ __attribute__(cleanup) не всесилен. Локальную размотку он делает, а вот глобальную прощёлкивает Насколько я помню, деструкторы тоже при longjmp тебе никто не обещает вызвать. Или я ошибаюсь? |
Сообщ.
#527
,
|
|
|
Не ошибаешься.
|
Сообщ.
#528
,
|
|
|
Стандарт не гарантирует. И мне всегда было жаль этго. Впрочем, объяснение, почему так, на поверхности. <setjmp> является интерфейсом из RTL языка C, поэтому к нему нет и быть не может никаких требований учитывать что-то там, не относящееся к C. Формально libc.a может просто браться и линковаться c программой C++, иначе всю библиотеку C пришлось бы переописывать в Стандарте Плюсов, из-за чего фактически одна сущность существовала бы в двух ипостасях, да ещё и по-разному реализованной. И по большому счёту тогда уж надо было бы отрефакторить многие функции. Главным образом небезопасные к многопоточности и безопасности.
Но WinAPI не только обещает, что всё должно разматываться по-честному, тут просто нет выбора. SEH ответственна за любую размотку стека вызовов, это механизм ОСи, а не языка, так что longjmp() обязан выполняться через GlobalUnwind(). И так как C++EH строиться на базе SEH, то в Плюсах пришлось бы прилагать усилия, чтобы longjmp() работал иначе, нежели со всеми гарантиями. |
Сообщ.
#529
,
|
|
|
Ха. Три раза. Просматриваю срач define vs template, на который сослался недавно Qraizer. Зацените
Цитата Fester @ (да блин, даже сейчас коллеги все еще боятся использовать исключения! и стараются вернуть код ошибки хотя пишут уже исключительно на C# Цитата KILLER @ А чего бояться? Боятся что исключение их укусит? Или они просто матерые сишники, которые по привычке в придачу пишут все в одном классе, не используют наследование, и все методы у них статические, и то! Только из за того, что в C# нельзя написать функцию вне класса? Может им на пенсию пора? Цитата KILLER @ А это что плохо? Если у тебя произошло исключение - это значит код, который его кинул - не смог справится с ошибкой. Коды возврата тебе тут не помогут. Если ты боишься что где то не обработаешь исключение, то почему ты не боишься того, что где то ты не проверишь возвращаемое значение? И все равно это приведет к крэшу, и хорошо - если к крэшу, так хоть упало - и сразу все понятно. А если будет не крэшь а произойдет операция - которая в принципе не должна произойти? По моему это хуже крэша. ... С кодами возврата можно отгребсти куда больше проблем. И таких ошибок, что catch(...) тебе сказкой покажется. Там хоть бряк можно поставить, и сразу туда вылететь в этот catch. Цитата KILLER @ Цитата Fester @ Это плохо, но не смертельно. А вот когда у тебя программа работает с некорректными данными, а ты еще об этом даже не догадываешься - вот тут будет полнейшая жопа. Ты просто можешь реально влететь в такую жопу. Что потом забудешь return, и будешь вместо него везде писать throw.Крэш - это полный отказ, в то время как какая-то незавершенная или неправильная операция совсем не означает, что приложение больше неработоспособно. Цитата KILLER @ Цитата Fester @ Блин, я не понимаю как вы программируете? Ты юзаешь функцию и незнаешь - кидает она тебе исключение или нет? или что? Да откуда бы оно не прилетело - ты можешь открыть дамп и посмотреть стек, и сразу понять - что и в каком месте у тебя вылетело.потому что исключение может прилететь откуда угодно, а все возвращаемые значения заранее известны. |
Сообщ.
#530
,
|
|
|
Парни, вы уж меня извините за тупизну - но "разматывание" длинных переходов я отношу (лично я) к лютоой дичи
В том числе к криминальной. |
Сообщ.
#531
,
|
|
|
Цитата OpenGL @ Ха. Три раза. Просматриваю срач define vs template, на который сослался недавно Qraizer. Зацените В очередной раз убеждаюсь в твоем неумении читать посты Я ж тут в этой теме нигде не топил ни за исключения, ни за коды возвратов. Я об этом даже прямо писал!!! А доколебался я, до твоей фразы, в которой ты написал, что то типа: "запомнить какие исключения кидает функция, не сложнее, чем проверить код возврата". Которое ИМХО, в корне не верно. И даже предложил тебе перечислить какие исключения кидает некая функция, которую ты в первый раз видишь глазами. А ты в очередной раз признал что не читаешь и перекручиваешь смысл обсуждения так, как тебе хочется. Причем я тебе об этом писал неоднократно. |
Сообщ.
#532
,
|
|
|
Разве я написал, что ты за/против исключений?
|
Сообщ.
#533
,
|
|
|
Цитата OpenGL @ Разве я написал, что ты за/против исключений? Ну а к чему ты тогда привел то, что выше? Очевидно же, что там спор о "коды возврата vs исключения". Как понимать твой смищной смайл? Смех без причины, признак сам знаешь чего? |
Сообщ.
#534
,
|
|
|
Цитата Wound @ Ну а к чему ты тогда привел то, что выше? Просто поржать. Ты возражаешь? |
Сообщ.
#535
,
|
|
|
Цитата OpenGL @ Просто поржать. Ты возражаешь? С чего конкретно? |
Сообщ.
#536
,
|
|
|
Киля, расслабься. Если ты не видишь ничего смешного - сочувствую, поскольку объяснять я ничего не намерен
|
Сообщ.
#537
,
|
|
|
Цитата JoeUser @ Пиши структурные аналоги, если хочется в гамаке постоять. Никто ж не заставляет исключаться. Парни, вы уж меня извините за тупизну - но "разматывание" длинных переходов я отношу (лично я) к лютоой дичи |
Сообщ.
#538
,
|
|
|
Цитата Qraizer @ Пиши структурные аналоги, если хочется в гамаке постоять. Никто ж не заставляет исключаться. В том то и дело - я этого никогда не пользовал. Ди и никогда к этому и не претендовал! Локально - это естественно, глобально - дичь. Именно поэтому я и апеллирую к тому, что "Локальную размотку он делает, а вот глобальную прощёлкивает" - есть левое утверждение. Которое ваще без берегов. И его нужно рассчтрелять. |
Сообщ.
#539
,
|
|
|
Цитата Wound @ Просто ты тогда спорил с аргументами в точности совпадающими с теми, которые приводишь сейчас. Это и правда смешно. С чего конкретно? |
Сообщ.
#540
,
|
|
|
OpenGL, наверное можно было не прямые цитаты давать, а отвечать на посты Кили его же постами
Но вообще если серьезно, то времени не так и мало прошло, человек мог поменять мнение. |