Среда выполнения C ++, отображение сообщения об исключении - PullRequest
16 голосов
/ 26 апреля 2010

Я использую gcc на Linux для компиляции кода C ++. Есть некоторые исключения, которые не должны обрабатываться и должны закрывать программу. Тем не менее, я хотел бы иметь возможность отображать строку исключения:

Например:

throw std::runtime_error(" message"); не отображает сообщение, только тип ошибки. Я хотел бы также отображать сообщения. Есть ли способ сделать это?

это библиотека, я действительно не хочу помещать операторы catch и позволять пользователю библиотеки решать. Тем не менее, прямо сейчас пользователь библиотеки является fortran, который не позволяет обрабатывать исключения. в принципе, я могу поместить обработчики в код обертки, но не делать этого, если есть обходной путь

Ответы [ 4 ]

18 голосов
/ 26 апреля 2010

Стандартные исключения имеют виртуальный метод what(), который выдает сообщение, связанное с исключением:

int main() {
   try {
       // your stuff
   }
   catch( const std::exception & ex ) {
       cerr << ex.what() << endl;
   }
}
6 голосов
/ 26 апреля 2010

Вы можете написать в основном:

try{

}catch(const std::exception &e){
   std::cerr << e.what() << std::endl;
   throw;
}
2 голосов
/ 26 апреля 2010

Вы можете использовать блок try/catch и оператор throw;, чтобы позволить пользователю библиотеки обработать исключение. throw; оператор передает управление другому обработчику для того же исключения.

1 голос
/ 26 апреля 2010

Я рекомендую сделать адаптер для вашей библиотеки для абонентов фортрана. Поместите свою попытку / поймать в адаптер. По сути, вашей библиотеке нужно несколько точек входа, если вы хотите, чтобы она вызывалась из fortran (или C), но все же позволяла исключениям распространяться на вызывающие C ++. Этот способ также имеет преимущество, заключающееся в предоставлении связи C ++ вызывающим абонентам C ++. Только наличие интерфейса Fortran существенно ограничит вас в том, что все должно передаваться по ссылке, вам необходимо учитывать скрытые параметры для char * arguments и т. Д.

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