[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