在本文中,关键字extern后面可以跟"C"或"C++".为什么要使用'extern'C++"'?这是实用的吗?
语言允许:
extern "C" { #include "foo.h" }
如果foo.h包含需要C++链接的东西怎么办?
void f_plain(const char *); extern "C++" void f_fancy(const std::string &);
这就是你如何保持链接器的快乐.
没有真正的理由可以使用extern "C++"
.它只是明确了隐式默认的链接.如果你有一个类,其中一些成员有外部"C"链接,你可能希望明确说明其他成员是extern"C++".
请注意,C++标准在语法上定义extern "anystring"
.它只给正规的含义extern "C"
和extern "C++"
.编译器供应商可以自由定义extern "Pascal"
,甚至extern "COM+"
可以自己定义.
我不确定你为什么需要这样做,但是根据Sun的这篇文章,你可以在extern"C"块中使用extern"C++"来指定一组"C"函数中的某些函数本机C++链接.
extern "C" { void f(); // C linkage extern "C++" { void g(); // C++ linkage extern "C" void h(); // C linkage void g2(); // C++ linkage } extern "C++" void k();// C++ linkage void m(); // C linkage }
两个猜测:
如果您在一个extern "C"
块中,则可以通过指定嵌套来再次获得C++语言链接extern "C++"
.
它保留了C++
链接,因为它是定义C++的文档.谁能更好地定义C++
语言联系而不是自身.它还提供完整性.同样的交易signed/unsigned
.
阅读这个解释extern "LanguageName"
(即GCC extern "Java"
)的答案.