關於extern "C" 的用法

而在C語言的頭文件中,對其外部函數只能指定爲extern類型,C語言中不支持extern "C"聲明,在.c文件中包含了extern "C"時會出現編譯語法錯誤。
筆者編寫的C++引用C函數例子工程中包含的三個文件的源代碼以下:
/* c語言頭文件:cExample.h */
#ifndef C_EXAMPLE_H
#define C_EXAMPLE_H
extern int add(int x,int y);     //注:寫成extern "C" int add(int , int ); 也能夠
#endif
/* c語言實現文件:cExample.c */
#include "cExample.h"
int add( int x, int y )
{
 return x + y;
}
// c++實現文件,調用add:cppFile.cpp
extern "C"
{
 #include "cExample.h"        //注:此處不妥,若是這樣編譯通不過,換成 extern "C" int add(int , int ); 能夠經過
}
int main(int argc, char* argv[])
{
 add(2,3);
 return 0;
}
  若是C++調用一個C語言編寫的.DLL時,當包括.DLL的頭文件或聲明接口函數時,應加extern "C" { }。
  其實目的就是告訴編譯器,要用c的方式去連接所要引用的函數(不要改變它的名字映射),這樣咱們就能調用它;若是不聲明的話,它就會以c++的形式作映射,這樣的話,去obj文件中查找相應函數進度,是沒有的。主要是由於c和c++的函數在編譯的時候造成的中間函數名字是不同的,因此咱們要在c++中用extern來聲明函數,這樣的話,就能夠調用c中的函數,dll調用同樣的。
相關文章
相關標籤/搜索