#ifdef __cplusplus
 extern "C" {
 #endif 


  步骤二:将下列行放进c头文件的下方:


#ifdef __cplusplus
 }
 #endif 


  现在你可以在c++代码中不加入任何讨厌的extern "C"而直接include你的c头文件了:


// This is C++ code
 
 // Get declaration for f(int i, char c, float x)
 #include "my-C-code.h"   // Note: nothing unusual in #include line
 
 int main()
 {
   f(7, 'x', 3.14);       // Note: nothing unusual in the call
   ...
 } 


  5、我怎样在我的c++代码中调用一个非系统的c函数

  如果你要去调用一个单独的c函数,或者因为某种原因你不想包含一个声明了c函数的头文件,你可以使用extern "C"语法在你的c++代码中单独声明c函数。一般的,你需要使用完整函数原型:


extern "C" void f(int i, char c, float x); 


  一组c函数的声明可以用括号括起来:


extern "C" {
   void   f(int i, char c, float x);
   int    g(char* s, char const* s2);
   double sqrtOfSumOfSquares(double a, double b);
 } 


  在这之后你可以像使用c++函数一样调用它们:


int main()
 {
   f(7, 'x', 3.14);   // Note: nothing unusual in the call
   ...
 
  6、怎样创建一个可以被c代码调用的c++函数f(int, char, float)

  c++编译器一定要通过extern "C"结构知道f(int, char, float)将要被一个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)
 {
   ...
 } 


  extern “C"告诉编译器交给连接器的外部符号应该使用c调用规范和命名变异(也是加一个前缀下划线)。既然c不支持名称重载,你不能重载几个被c程序调用的函数。

  7、为什么c++/c函数调用c/c++函数会给出链接错误

  如果你没有写对extern "C",你会得到链接错误而不是编译错误。这是因为c++编译器一般会使用和c编译器不同的命名变异(也是为了支持函数重载)。

  8、怎样将一个c++类的对象传入或者传出一个c函数

  这是一个例子:

  fred.h