当前位置:  开发笔记 > 编程语言 > 正文

为什么要使用'extern'C++"'?

如何解决《为什么要使用'extern'C++"'?》经验,为你挑选了4个好方法。

在本文中,关键字extern后面可以跟"C"或"C++".为什么要使用'extern'C++"'?这是实用的吗?



1> Thomas L Hol..:

语言允许:

extern "C" {
  #include "foo.h"
}

如果foo.h包含需要C++链接的东西怎么办?

    void f_plain(const char *);
    extern "C++" void f_fancy(const std::string &);

这就是你如何保持链接器的快乐.


我不理解downvotes.这是一个需要extern C++的用例,它是合法的.
它不仅有效,我已经看到它在野外使用(这是我的"啊哈"时刻).看看winnt.h.

2> James Curran..:

没有真正的理由可以使用extern "C++".它只是明确了隐式默认的链接.如果你有一个类,其中一些成员有外部"C"链接,你可能希望明确说明其他成员是extern"C++".

请注意,C++标准在语法上定义extern "anystring".它只给正规的含义extern "C"extern "C++".编译器供应商可以自由定义extern "Pascal",甚至extern "COM+"可以自己定义.


我希望编译器支持`extern"Haskell"`.
当您需要覆盖周围范围中的某些其他链接规范时,可以使用它.

3> jeffm..:

我不确定你为什么需要这样做,但是根据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
}



4> Johannes Sch..:

两个猜测:

如果您在一个extern "C"块中,则可以通过指定嵌套来再次获得C++语言链接extern "C++".

它保留了C++链接,因为它是定义C++的文档.谁能更好地定义C++语言联系而不是自身.它还提供完整性.同样的交易signed/unsigned.

阅读这个解释extern "LanguageName"(即GCC extern "Java")的答案.

推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有