Здравствуйте, Evgeny.Panasyuk, Вы писали:
Pzz>>Ну да, так и пишем, все руками. Полезность C++'ных автоматизмов сильно переоценена. В том смысле, что необходимость делать все явно добавляет, конечно, работы, но не так, чтобы очень много.
EP>Error-prone, легко забыть и трудно поддерживать.
Все эти C++'ные автоматизмы тоже error-prone. Особенно если учесть, как хорошо и неочевидно они могут быть запрятаны.
Pzz>>Обработка ошибок в виде явно возвращаемых кодов возврата — это не такой уж и плохой вариант. В отличии от исключений, все перед глазами и все легко читается, ошибка не прилетит неизвестно откуда и не улетит неизвестно куда.
EP>Error codes точно также летят наверх неизвестно куда.
EP>Хотя часто вообще не летят, ибо на них забивают — примерАвтор: MTD
Дата: 21.02.13
.
Там явно последовательность вызовов, которые вряд ли могут вернуть ошибку. Поэтому ребята притомились и перестали проверять
Для такого случая, как в том примере, есть еще один неплохой вариант. Пусть этот sAIMenu запоминает внутри себя, что очередное издевательство над ним вернуло ошибку, и игнорирует все последущие. Тогда можно смело совершенно написать 100500 действий в столбик, и проверить, нет ли там запомненной ошибки, в самом конце.
А еще можно, чем добавлять item'ы в меню сотней последовательных вызовов, сделать из них табличку и пройтись по ним циклом. Тогда ошибку придется проверять в одном месте внутри цикла, а не при каждом вызове, код станет короче, проще и более поддерживаемый.
В общем, все можно сделать аккуратно независимо от языка.
Pzz>>setjmp/longjmp для обработки ошибок очень мало подходят, это экзотические функции, которые бывают полезны в редких случаях.
EP>Их используют для эмуляции исключений.
И это не самый хороший подход.