Среда выполнения C ++, отображение сообщения об исключении

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

Например:

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

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

12 голосов | спросил Anycorn 26 PMpMon, 26 Apr 2010 21:14:05 +040014Monday 2010, 21:14:05

4 ответа


0

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

int main() {
   try {
       // your stuff
   }
   catch( const std::exception & ex ) {
       cerr << ex.what() << endl;
   }
}
ответил 26 PMpMon, 26 Apr 2010 21:16:14 +040016Monday 2010, 21:16:14
0

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

try{

}catch(const std::exception &e){
   std::cerr << e.what() << std::endl;
   throw;
}
ответил EFraim 26 PMpMon, 26 Apr 2010 21:16:46 +040016Monday 2010, 21:16:46
0

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

ответил Kirill V. Lyadvinsky 26 PMpMon, 26 Apr 2010 21:23:01 +040023Monday 2010, 21:23:01
0

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

ответил frankc 26 PMpMon, 26 Apr 2010 22:19:04 +040019Monday 2010, 22:19:04

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132