返回

extern "C" 含义及应用

人工智能

在 C++ 中,extern "C" 是一种编译器指令,用于指定代码块或函数遵循 C 语言的调用约定(calling convention),而不是 C++ 的调用约定。

C++ 与 C 的调用约定

在 C++ 中,函数的调用约定定义了以下方面:

  • 参数传递方式(按值传递、按引用传递或按指针传递)
  • 函数返回类型的大小和对齐方式
  • 异常处理

而 C 语言的调用约定与 C++ 略有不同。

extern "C" 的作用

当 C++ 代码中需要与 C 代码交互时,就需要使用 extern "C"。这是因为 C++ 和 C 的调用约定不同,如果不使用 extern "C",编译器可能会生成不兼容的代码。

通过使用 extern "C",编译器将按照 C 语言的调用约定来编译指定代码块或函数,确保其与 C 代码兼容。

使用 extern "C" 的场景

extern "C" 主要用于以下场景:

  • 链接 C 语言库到 C++ 程序中
  • 将 C++ 函数导出为 C 函数,以便 C 程序可以调用

extern "C" 的语法

extern "C" 的语法如下:

extern "C" {
  // C 语言代码块或函数
}

实例

以下是使用 extern "C" 的示例:

#include <stdio.h>

extern "C" {
  int sum(int a, int b) {
    return a + b;
  }
}

int main() {
  int result = sum(1, 2);
  printf("结果为:%d\n", result);
  return 0;
}

在这个示例中,sum 函数使用 extern "C" 指定为 C 语言函数,因此 C++ 程序可以调用它。

注意

在使用 extern "C" 时,需要注意以下几点:

  • extern "C" 只能用于函数或代码块,不能用于类或对象。
  • extern "C" 指定的代码块或函数中的 C++ 特性(如异常处理)将不可用。
  • 使用 extern "C" 时,需要确保函数签名(名称、参数类型和返回类型)与 C 语言兼容。

总结

extern "C" 是 C++ 中用于与 C 代码交互的重要编译器指令。通过使用 extern "C",可以确保 C++ 代码与 C 代码兼容,实现跨语言函数调用。