Если SubProcedureB вызывает исключение, будет ли обработано исключение на уровне главной процедуры A?
Да. Когда возникает исключение, оно распространяется вверх по стеку вызовов, пока соответствующий обработчик не перехватит его. Если ни один обработчик не перехватит его, то процесс обычно завершится.
Будет ли выполнена подпроцедура C?
Обычно нет , однако включен Windows по крайней мере, возможно (но не с синтаксисом Delphi except
) для обработчика исключений, чтобы дать системе команду вернуться к исходному сайту вызова, вызвавшему исключение. Это полезно в редких случаях, когда обработчик исключений может фактически исправить условие, которое вызвало возникновение исключения, что позволяет продолжить выполнение с того места, где оно было прервано. Но опять же, это очень редко.
Будет ли исключение перенаправлено в процедуру А без изменений?
Обычно да . В памяти имеется только 1 Exception
объект, и он передается каждому обработчику исключений в стеке вызовов, пока не будет найден соответствующий обработчик. При этом возможно для обработчика исключений перехватить исключение, изменить его (в конце концов, это всего лишь объект в памяти), а затем повторно вызвать его, чтобы продолжить поиск до вызова стек для другого обработчика. Это не так в вашем примере, но это разрешено.
Или, может быть, есть ограничение на подпроцедуры, например, подподпоподпрограмма больше не будет пропускать исключение к процедуре более высокого уровня?
Нет такого ограничения.