C底世界

C 学习库

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  3 Posts :: 1 Stories :: 0 Comments :: 0 Trackbacks

常用链接

留言簿(12)

我参与的团队

搜索

  •  

最新评论

阅读排行榜

评论排行榜

extern "C"{}的作用就是说明这在{}范围之内说明的函数是按c,或者需要按c标准来编译。可以从声明调用二个方面来描述它的作用:
1.声明
  以下c++代码:
  extern "C" { void test() }
  void test()
  {
    // do test
  }
表示希望编译器使用c标准来编译test函数。而在c语言中不支持extern "C"。
2.c++代码调用c代码
  extern "C" { void test() //test()是c代码或者或者说明是按c标准编译的代码 }
  int main()
  {
     test();
  }
 无论test函数是c写的还是c++写的,只要它是按c标准编译的,就需要加上extern "C" 声明
3.c调用c++代码
  c要调用c++代码,在c++代码中必须以extern "C" 来声明函数,如上文1所示。以下是c代码
  void test();
  int main()
  {
     test();
  }

例如:
#ifdef   __cplusplus     /*   __cplusplus  表示是C++程序 */ 
  extern   "C"   {       //这是什么意思   ?????????????  
  #endif   /*   __cplusplus   */

表示如果现在的编译环境是C++的话,让编译器生成C样式的函数名,也就是阻止编译器使用C++的方法进行函数名解析。

C++中因为函数可以重载:  
  int   a(char)  
  int   a(int)  
  int   a(double)...  
  所以,在编译后的代码里,三个a()是不同的函数名如a_char_xxx,a_in_xxx,a_double_xxx等等.

要去掉后面的一大串符号只要在a()前面加上exter   "C"即可

在DLL的对外接口函数中,必须用exter   "C"   限制,否则,外部调用者根本不知道你的真正函数名.

1   VC6.0编译器可以按C++或C生成目标函数.   两者生成的目标符号表  
      并不一样.   C方式是与原来标准C相兼容.   
2   在DLL中的接口函数一般应按C方式编译而成.   extern   "C"   就是强  
      制指定.   如果不按这种方式指定.GetProcAddress(...)取出来的   
      就不对.   只能隐式连接.

  extern   "c"   的作用就是使得函数的定义名称和导出名称一致

posted on 2008-07-10 09:07 C_Student 阅读(518) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理