Примечание:
Вы уверены, что сказать компилятору "все эти функции никогда не выдают" - это именно то, что вам нужно?
Это не обязательно, так что extern "C" ...
функции не могут распространять / инициировать исключения.Возьмем для примера:
class Foo {
public:
class Away {};
static void throwaway(void) { throw Away(); }
}
extern "C" {
void wrap_a_call(void (*wrapped)(void)) { wrapped(); }
}
int main(int argc, char **argv)
{
wrap_a_call(Foo::throwaway);
return 0;
}
Компиляция и запуск этого создает функцию C-linkage wrap_a_call()
, которая при вызове, как описано выше, с радостью вызовет исключение:
$ ./test
terminate called after throwing an instance of 'Foo::Away'
Abort(coredump)
Т.е. может быть «утечка исключений» с extern "C"
(посредством вызова указателей на функции), и только то, что вы используете / вызываете функции extern "C"
в определенном месте в C ++, не гарантирует , исключение не можетбыть брошенным при вызове тех.