Как компилятор C++ реализует обработку исключений

ОГЛАВЛЕНИЕ

Подробное обсуждение того, как VC++ реализует обработку исключений. Исходный код содержит библиотеку обработки исключений для VC++.

·         Загрузить файлы исходного кода - 19 Кб

Введение

Одна из революционных возможностей C++ по сравнению с традиционными языками – его поддержка обработки исключений. Она обеспечивает хорошую альтернативу традиционным методам обработки ошибок, являющимся неэффективными и подверженными ошибкам. Четкое разделение между нормальным кодом и кодом обработки ошибок делает программу очень аккуратной и удобной в сопровождении. В этой статье описано все, что требуется для выполнения обработки исключений компилятором. Предполагается общее понимание механизма обработки исключений и его синтаксиса. Была реализована библиотека обработки исключений для VC++, сопровождаемая этой статьей. Чтобы заменить обработчик исключений, предоставленный VC++, библиотечным обработчиком, вызовите следующую функцию:

install_my_handler();

После этого, любое исключение, которое возникнет внутри программы – от выбрасывания исключения до раскрутки стека, вызова блока захвата исключения и последующего возобновления выполнения – обрабатывается созданной библиотекой обработки исключений.

Стандарт C++, как и любой другой элемент в C++, ничего не говорит о том, как должна быть реализована обработка исключений. Это значит, что любой разработчик может использовать любую реализацию, какую сочтет нужным. Будет описана реализация этой возможности в VC++, но это будет хорошим учебным материалом и для тех, кто использует другие компиляторы или операционные системы. VC++ строит свою поддержку обработки исключений поверх структурной обработки исключений (SEH), предоставленной операционной системой Windows.