Могу ли я сделать так, чтобы ошибки с плавающей точкой превращались в исключения C ++ с помощью инструментов MS? - PullRequest
2 голосов
/ 28 октября 2011

Я привык к программированию на Delphi. В этой системе аппаратное исключение с плавающей запятой, например, деление на ноль, переполнение и т. д. приводит к возникновению собственного исключения Delphi. Механизм состоит в том, что аппаратные исключения не маскируются, и эти аппаратные исключения преобразуются с помощью Delphi RTL в собственные исключения Delphi.

Мое приложение имеет подключаемую архитектуру, и многие из моих клиентов пишут подключаемые модули с использованием компилятора MS C ++. Когда в коде плагина C ++ клиента происходит ошибка с плавающей запятой, это выпрыгивает из кода C ++ и в обработчик исключений в моем Delphi-коде. Это затрудняет для автора плагина диагностику того, где в их коде проблема, потому что, насколько я могу судить, они не могут перехватить эти исключения, поскольку они не являются исключениями C ++.

Можно ли как-нибудь установить в коде C ++ какую-либо опцию, чтобы компилятор C ++ преобразовывал исключения с плавающей запятой в исключения C ++? Или я должен замаскировать исключения в коде C ++ и вручную проверить ошибки?

И, кроме того, как можно написать надежный научный и числовой код, если стандартные инструменты C ++ игнорируют ошибки с плавающей запятой? Это похоже на явную слабость, или я что-то упустил?

Ответы [ 2 ]

3 голосов
/ 28 октября 2011

Как насчет этого примера преобразования SEH в исключения C ++?

2 голосов
/ 28 октября 2011

Да, соответствующая функция: _set_se_translator

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...