【问题标题】:How does extern "C" work in C++? [duplicate]extern "C" 如何在 C++ 中工作? [复制]
【发布时间】:2012-02-29 17:15:28
【问题描述】:

我看到一些 C++ 代码在文件开头使用 extern "C",如下所示:

#ifdef __cplusplus 
extern "C" {} 
#endif

这是什么意思?它是如何工作的?

【问题讨论】:

标签: c++ extern-c


【解决方案1】:

它用于通知编译器禁用大括号内定义的函数的 C++ 名称修改。 http://en.wikipedia.org/wiki/Name_mangling

【讨论】:

  • +1 你在一行中说出了我在 100 中要说的内容。干得好。
【解决方案2】:

可能不是这样,但更像:

#ifdef __cplusplus 
extern "C" {
#endif

//some includes or declarations

#ifdef __cplusplus 
}
#endif

它告诉编译器使用 C 名称修饰来处理指令中声明的任何内容。

你现在的样子:

#ifdef __cplusplus 
extern "C" {} 
#endif

只是死代码。

【讨论】:

  • 但是我看到的代码是:#ifdef __cplusplus extern "C" {} #endif ,是不是代码错了?
  • @ratzip 没有错,只是死代码。它什么都不做。
  • 它告诉编译器(不是链接器)对函数使用 C 约定,而不是 C++。这不仅涉及名称修改,还涉及传递参数的约定,可能还有其他事情。
  • @JamesKanze 你是说链接器不需要知道名称修改吗?
  • 一点也不。编译器会破坏名称。链接器将它赋予的任何名称连接到它所要求的任何名称。
【解决方案3】:

Extern "C" - 通知编译器,指出的函数是以 C 风格编译的。

【讨论】:

    【解决方案4】:

    它指定了一个linkage specification
    它告诉链接器如何链接代码。

    当你想mix C and C++ code时很有用。

    【讨论】:

    • @Nawaz:谁这么说的? "C"是。
    猜你喜欢
    • 2011-07-03
    • 1970-01-01
    • 2017-05-02
    • 2014-02-20
    • 2015-12-30
    • 2020-06-07
    • 2019-12-22
    • 2017-12-20
    • 1970-01-01
    相关资源
    最近更新 更多