【问题标题】:extern "C", what is it useful for? [duplicate]extern "C",它有什么用? [复制]
【发布时间】:2012-09-15 21:07:41
【问题描述】:

可能重复:
Combining C++ and C - how does #ifdef __cplusplus work?

我在许多图书馆都遇到过以下几行;它们有什么用? __cplusplus 何时/何地定义?

#ifdef __cplusplus
    extern "C" {
#endif

//...

#ifdef __cplusplus
    }
#endif

【问题讨论】:

标签: c++ c c-preprocessor


【解决方案1】:

__cplusplus 是为 C++ 代码定义的。有时您必须混合使用 C 代码和 C++ 代码。这可能有很多原因,例如你有一个很久以前用 C 语言编写的驱动程序,你想在你全新的 C++0x 项目中使用它。

每个函数类型和名称都有一个语言链接。 C 和 C++ 函数之间存在区别,因为 C 没有函数名重载,所以函数名可以作为 C 中的唯一标识符,但不能在 C++ 中。这称为function mangling

由于您不需要在 C 中修改名称,因此使用 extern "C" 将使编译器省略添加参数信息以进行链接。

C++ 标准在 7.5 第 3 段中明确规定:

每个实现都应提供与编写的函数的链接 C 编程语言“C”以及与 C++ 函数的链接“C++”。

complex sqrt(complex); //C++ linkage by default
extern "C" {
    double sqrt(double);//C linkage
}

【讨论】:

  • @SingerOffTheFall 太棒了,您可以将任何您想要的 C 代码放在这些括号内吗?什么是 7.5 第 3 段?
  • @saad,是的,它用于在 C++ 中包含有效的 C 代码。 7.5 第 3 段是我引用的标准的一部分。
  • “让你执行 C 代码”只是一派胡言。 C++ 中的一切都是 C++。 extern "C" 只是一个链接说明符。
  • @SingerOfTheFall 你有标准的链接吗?
  • @saad,标准本身可以购买here,官方不能免费获得,但是,您可以找到通常免费提供的最新草案之一,并且与最终版本没有太大区别。
猜你喜欢
  • 1970-01-01
  • 2019-07-21
  • 1970-01-01
  • 2011-02-17
  • 2013-10-12
  • 2012-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多