Требуется ли для обработки исключений объектно-ориентированное программирование?
Нет.Два совершенно разные.Можно иметь языки OO, которые не имеют обработки исключений в качестве примитива потока управления, и можно иметь обработку исключений в языках не OO.
Объектно-ориентированное программирование, как подсказывает Википедия, - это стиль программирования, в котором подчеркивается значение , инкапсуляция , обмен сообщениями , модульность , полиморфизм и наследование для достижения недорогого повторного использования кода и эффективного управления сложными программными проектами, реализуемыми большими группами.
В этом списке вы не видите «циклы», «операторы if», «goto» или «try-catch-finally-throw», потому что примитивы потока управления не имеют ничего общего сабстракция, инкапсуляция, обмен сообщениями, модульность, полиморфизм или наследование, используемые для достижения повторного использования недорогого кода или эффективного управления сложными программными проектами большими группами.
Чему не хватает C, чтобы сказать, C ++, в машинном коде, который заставляет работать исключения?
Несомненно, современное оборудование разработано с обработкой исключений в качестве примитива потока управления.C был разработан задолго до того, как появилось это современное оборудование, что усложнило бы реализацию обработки исключений в C, которая эффективно работает на всем оборудовании, на котором работает C.
Но, тем не менее, ничто не мешает вам или кому-либо еще разрабатывать новую версию C, в которой обработка исключений является примитивом потока управления, но без всех других функций C ++.
Если вам интересен вопрос о том, как добавить обработку исключений к не-OO-языкам, поддерживающим продолжения, см. Мою статью на эту тему, которая очерчивает идею:
http://blogs.msdn.com/b/ericlippert/archive/2010/10/22/continuation-passing-style-revisited-part-two-handwaving-about-control-flow.aspx