[an error occurred while processing this directive]
[an error occurred while processing this directive]
|
По поводу именно этого примера - можно было бы вместо "goto bailout;" писать "return bailout();", а в функции static int bailout() написать сами понимаете что. Другое дело, когда нужно было бы в функции bailout() использовать локальные переменные вызывающей функции: передавать их как параметры (особенно если их много) не всегда оправдано. В таком случае скорее всего goto - лучшее решение.
А по поводу выхода из глубокой рекурсии: тов. или трус или лентяй должно быть имел в виду глубоко вложенный цикл и/или ветвление.
И ещё. Я не верю в рецепты типа "никогда не используйте goto" или "всегда запаковывайте всё в отдельный класс" (или как там в С++ :-). Это можно понять как совет (а не приказ) новичкам. Бывалый программер должен знать все средства языка; он сможет распорядиться ими лучшим образом в каждой конкретной ситуации. Ясно, что в случае Петрухи бывалый программер скорее всего всё сделал бы по-другому, так, что goto не понадобился бы. Но ув. Петруха и сам сказал, что он недавно перешёл с асм на С.
С уважением, Михаил.
E-mail: info@telesys.ru