26 Ağustos 2019 Pazartesi

Visual Studio _set_se_translator

Giriş
Açıklaması şöyle.
MSVC function _control87() enables trapping of the floating-point exceptions, which generates a hardware exception, which can be converted to C++ exceptions with _set_se_translator.
Örnek
Şöyle yaparız
#include <eh.h>
#include <memory>

int main() {
    std::shared_ptr<void(unsigned, EXCEPTION_POINTERS*)> handler(
        _set_se_translator([](unsigned u, EXCEPTION_POINTERS* p) {
            switch(u) {
                case FLT_DIVIDE_BY_ZERO:
                case INT_DIVIDE_BY_ZERO:
                    throw std::logic_error("Divide by zero");
                    break;
                ...
                default:
                    throw std::logic_error("SEH exception");
            }
        }),
        [](_se_translator_function f) { _set_se_translator(f); });

    int i = 0;

    try {
        i = 5 / i;
    } catch(std::logic_error e) {
        std::cerr << e.what();
    }
}




Hiç yorum yok:

Yorum Gönder