在C++中使用extern"C"时我到底输了什么?

use*_*183 14 c c++ extern linkage

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

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

das*_*ght 15

唯一被丢弃的是外部可见名称的名称损坏.参数类型的函数重载以及参数计数因结果而停止工作.实质上,链接阶段的名称解析将返回到普通的旧C模式(即一个名称 - 一个条目).

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

  • 在函数体中使用STL就可以了.使用STL作为参数或返回类型可能会有麻烦. (3认同)