c++ - 标记为 Extern "C"的 C++ 函数可以抛出吗?

标签 c++ extern-c

我有想要使用 extern "C" 声明的 C++ 函数,即使它们只在 C++ 代码中调用。是的,我知道这很奇怪,但为了保持一致性,我想这样做,因为我们混合了 C 和 C++ 声明。我只是想确保将 C++ 函数声明为 extern "C" 不会影响抛出的行为。

看起来像这样:

extern "C" void foo() {throw exception;}

int bar()
{
    try
    {
        foo();
    } catch (exception e) { return 1; }
}

最佳答案

“标记为外部“C”的 C++ 函数可以抛出吗?”

是的,无论是语言还是编译器都不会阻止您这样做。

,从某种意义上说,如果你抛出,这将是一个未定义的行为,因为 C++ 异常跨越了语言边界。

在实践中:不要这样做。捕获异常并将其转换为错误代码,或其他语言可以理解的方式。

所以底线是:不要从标记为 extern "C" 的函数中抛出异常。

关于c++ - 标记为 Extern "C"的 C++ 函数可以抛出吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15845681/

相关文章:

c++ - 为什么这个依赖名称查找找到的是全局标识符而不是方法?

c++ - GetAcceptExSockaddrs 填充的指针的生命周期

c++ - 我可以在 C++ 中的 const 指针上有一个指针吗?

c++ - Linux通过pid获取窗口图标

c++ - 如何在 new[] 的值初始化中使用变量

c++ - 为什么不能对 C 函数进行名称修改?

c++ - extern 和 extern "C"用于变量

c++ - 未解析的外部和外部 "C"?

c++ - OpenCV 3:可用的 FeatureDetector::create() 和 DescriptorExtractor::create() 选项列表?