从C源代码调用C++函数

dom*_*lao 1 c c++

是否可以从C源代码调用C++函数?

请指教.

非常感谢.

wkl*_*wkl 9

您将需要查看extern C构造.

从链接:

 // This is C++ code

 // Declare f(int,char,float) using extern "C":
 extern "C" void f(int i, char c, float x);

 ...

 // Define f(int,char,float) in some C++ module:
 void f(int i, char c, float x)
 {
   ...
 }
Run Code Online (Sandbox Code Playgroud)

您还可以使用extern C构造声明/定义多个函数,如下所示:

使用声明和多个函数 extern C

extern "C"
{
   void func1();
   void func2();
}

extern "C"
{
   void func1()
   {
      /// do something
   }

   void func2()
   {
      // do something else
   }
}
Run Code Online (Sandbox Code Playgroud)

你甚至可以#includeextern "C"这样的方式包装声明:

   extern "C"
   {
      #include "myHeader.h"
   }
Run Code Online (Sandbox Code Playgroud)

在虚构的头以上会引起一切myHeader.h有C键,但可能会导致问题的嵌套包括-基本上,不要使用此构造,如果你可以直接修改文件头自己.这是最后的手段.

注意事项

正如Jack Kelly(感谢Jack Kelly!)所提到的,请确保如果您的C++代码涉及异常,那么它们将在您的函数中处理并且不允许传播到C.

使用extern "C"链接定义的函数不能重载,因为C不允许具有相同名称的多个函数.

您的C和C++代码必须使用类似的编译器进行编译,因为它们需要就类型,调用约定等达成一致.

参考文献,因为我无法单独做到这一点

感谢评论者.

  • @Jack凯利 `extern"C"`并不意味着该函数被编译为C代码,它仍然是C++它只有C _language linkage_.我不知道这是不是你的意思,但这不是你所说的. (2认同)