一、extern "C"的作用

extern "C"关键字常用于C++和C混合编程中,用于指定函数或变量采用C语言的命名和调用约定。加上extern "C"后,会指示编译器这部分代码按C语言(而不是C++)的方式进行编译。

由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名(而C语言并不支持函数重载,因此编译C语言代码的函数时不会带上函数的参数类型,一般只包括函数名)。

也就是说:C++和C对产生的函数名字的处理是不一样的,extern "C"的目的就是主要实现C与C++的相互调用问题。

二、extern "C"的使用要点

详见这里

🍎 单一语句:

extern “C” double test;

🍎 复合语句, 相当于复合语句中的声明都加了 extern “C”:

extern “C”
{
      double test1;
      int test2;
}

🍎 可以包含头文件,相当于头文件中的声明都加了extern “C” (不建议这样写,会有嵌套可能)

extern “C”
{
      #include <cmath>
}

🍎 注意事项: 

  • extern “C” 不可在函数内部使用;
  • 如果函数有多个声明,可以都加 extern “C”, 也可以只出现在第一次声明中,后面的声明会接受第一个链接指示符的规则。

三、什么时候使用extern "C"?

  1. 在C++代码中调用C语言的函数或变量:当在C++代码中调用C语言的函数或变量时,需要在函数或变量的声明前添加extern "C"关键字,以指定使用C语言的命名和调用约定。这样可以避免C++的函数重载和参数类型检查机制对函数或变量的名称进行修改,从而保证能够正确地找到对应的函数或变量定义。

  2. 在C语言代码中调用C++的函数:当在C语言代码中调用C++的函数时,由于C语言不支持函数重载和参数类型检查机制,因此需要使用extern "C"关键字来指定使用C语言的命名和调用约定。同时,需要注意在C++代码中定义的函数中不能使用C语言不支持的特性,如C++的类和虚函数等。

https://bbs.csdn.net/topics/350006427

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐