更多名人名博

上市公司专栏

实时股价每分更新

纳斯达克(美元)(市值:亿美元)
综指: 涨跌幅:
公司 股价 涨幅度 市值
盛大
网易
九城
畅游
完美
巨人
新浪
百度
恒生指数(港币)(市值:亿港币)
综指: 涨跌幅:
公司 股价 涨幅度 市值
腾讯
金山
网龙
创业板
综指: 涨跌幅:
公司 股价 涨幅度 市值
宝网
d
您现在的位置:首页> 开发|游戏程序|专业工具| > 怎么在C程序中使用C++代码?

怎么在C程序中使用C++代码?

来源:IIEEG04-12-2011

Just declare the C++ function ``extern "C"'' (in your C++ code) and call it (from your C or C++ code). For example:

 // C++ code:

 extern "C" void f(int);

 void f(int i)
 {
  // ...
 }
Now f() can be used like this:

 /* C code: */

 void f(int);
 
 void cc(int i)
 {
  f(i);
  /* ... */
 }
Naturally, this works only for non-member functions. If you want to call member functions (incl. virtual functions) from C, you need to provide a simple wrapper. For example:

 // C++ code:

 class C {
  // ...
  virtual double f(int);
 };

 extern "C" double call_C_f(C* p, int i) // wrapper function
 {
  return p->f(i);
 }
Now C::f() can be used like this:

 /* C code: */

 double call_C_f(struct C* p, int i);
 
 void ccc(struct C* p, int i)
 {
  double d = call_C_f(p,i);
  /* ... */
 }
If you want to call overloaded functions from C, you must provide wrappers with distinct names for the C code to use. For example:

 // C++ code:

 void f(int);
 void f(double);

 extern "C" void f_i(int i) { f(i); }
 extern "C" void f_d(double d) { f(d); }
Now the f() functions can be used like this:

 /* C code: */

 void f_i(int);
 void f_d(double);
 
 void cccc(int i,double d)
 {
  f_i(i);
  f_d(d);
  /* ... */
 }
Note that these techniques can be used to call a C++ library from C code even if you cannot (or do not want to) modify the C++ headers.