在C ++中使用extern“C”时我究竟会失去什么?

时间:2012-12-02 23:20:52

标签: c++ c extern linkage

我试图在C ++中开发一个动态库,由用IDL(交互式数据语言)编写的现有程序调用。我知道我需要使用extern" C"禁用名称修改,以便IDL可以调用它需要的函数(其余的调用机制非常简单)。

但是,我总是犹豫是否使用我不完全理解的语言功能,所以我的问题是:如果有的话,我会通过恢复C链接而丢失C ++的哪些功能?我认为命名空间是一个显而易见的,但它是否完全禁用了C ++的所有其他优点?我还可以使用C ++ STL,以及我所依赖的所有各种语言功能(特别是C ++ 11)吗?或者我基本上是用C编码?

1 个答案:

答案 0 :(得分:14)

唯一被删除的是name mangling外部可见名称。参数类型的函数重载以及参数计数因结果而停止工作。基本上,链接阶段的名称解析会回到普通的旧C模式(即一个名称 - 一个条目)。

就实现的内部而言,您可以继续使用标准库和C ++ 11的所有其他优秀功能。只有外部可见实体的名称才会被extern C更改。