[英]What happens when a C++ implementation throws an exception to C code
因此,我们有一个公共的C头文件(拍摄所有可C调用的文件)
//foo.h
#ifndef FOO_H
#define FOO_H
extern "C"
{
struct Foo;
typdef FooHandle Foo*;
FooHandle Foo_init();
int Foo_bar(FooHandle handle);
}
#endif
然后是C ++头文件:
//foo.hpp
#ifndef FOO_HPP
#define FOO_HPP
namespace my_foo
{
class Foo
{
public:
int bar();
};
}
并且比源文件:
//foo.cpp
#include "foo.h"
#include "foo.hpp"
#include <exception>
void my_foo::Foo:bar() {throw std::exception();}
FooHandle Foo_init() { return reinterpret_cast<FooHandle>(new my_foo::Foo());}
int Foo_bar(FooHandle handle){
my_foo::Foo& foo = *reinterpret_cast<my_foo::Foo*>(handle);
foo.bar();
}
当我在各种平台上从纯C上下文调用Foo_bar时会发生什么情况(因为不允许C ++异常)? 我知道行为可能是“未定义的”,但我对各种平台上发生的事情很感兴趣。
在Win32 C ++中,异常是在SEH(结构化异常处理)之上实现的。 除非C代码通过SEH机制捕获异常,否则异常会通过C代码传播并崩溃。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.