C/C++ 混合编程

C/C++ 混合编程

如何在C++中调用已经被编译好的C函数?下面的小例子展示了这个过程:

1.   
假设某C函数如下定义


/* file foo.c*/

#include <stdio.h>

int add(int x, int y)

{

  return x + y;

}

 

编译并生成DLL

gcc -fpic –c foo.c

gcc –shared -o foo.dll foo.o

 

2.    C++中调用这个被编译后的C函数

 

// file test.cpp

#include <iostream>

extern "C"

{

  int add(int x, int y);

}

 

int main()

{

#ifdef __cplusplus

  std::cout << "C++ defined" << std::endl;

#else

  std::cout << "C++ undefined" << std::endl;

#endif

 

  std::cout << add(1, 2) << std::endl;

  return 0;

}

编译并生成可执行文件:

g++ -o test.exe test.cpp foo.dll

 

3.    原因分析:

函数add()C编译器编译后在库中的名字为_add,而C++编译器则会产生_add_int_int之类的名字用来支持函数重载和类型安全连接。由于编译后的名字不同,C++程序不能直接调用C函数。C++提供了一个C连接交换指定符号extern “C” 来解决这个问题。

附示例代码

你可能感兴趣的:(C/C++ 混合编程)