[Comm] Знатокам gcc (3.2, C++)

Alexey Morozov =?iso-8859-1?q?morozov_=CE=C1_novosoft=2Eru?=
Пн Окт 28 16:50:52 MSK 2002


В задаче имеется:
1. библиотека, написанная на C (libpopt)
2. код на C++, ее использующий

Постановка задачи:

имеется C'шная функция, принимающая в качестве аргумента коллбэк и дергающая
его (при определенных условиях):
/* ------------------- test_lib.c ------------ */
void some_func(void (*callback_func)(void))
{
   callback_func();
}
/* ------------------ end of test_lib.c ---------- */

С++-ный код коллбэка и функции, инициирующей вызов some_func:
/* ------------------- test.cc --------------- */
#include <iostream>
using namespace std;
struct A {};
void callback_func(void)
{
    throw A();
}

extern "C" {
    void some_func(void (*callback)(void));
}
int main(void)
{
   try {
       some_func(callback_func);
   } catch (...) {
       cerr << "An exception caught" << endl;
   }
}
/* ----------------- end of test.cc --------------*/

Проблема: происходит аварийное завершение указанной программы (abort),
как если бы брошенный exception не соответствовал throw-спецификации.

Вопрос: как бы это обойти, и таки поймать в main брошенный в коллбэке
эксепшн?

Повторю, все происходит на gcc-3.2.1, менять библиотечную функцию по
условию задачи нельзя.




Подробная информация о списке рассылки community