c/c++ extern 和extern "c"

extern(c語言關鍵字):它告訴編譯器,其使用的變量或者函數已經在其餘模塊定義了。(c語言的模塊一般指文件範圍)c++

舉個例子:編程

a.c文件函數

 int j;編譯器

那麼在b.c裏面能夠編譯

extern int j;來使用a.c裏面的int j。變量

固然能夠在在a.c裏面定義static int j。經過添加static來限定int 只能在當前文件使用。gc

extern "c"(c++的關鍵字):主要用於c和c++的混合編程。他告訴編譯器,被它包含的代碼以c語言的方式編譯和鏈接(c語言和c++對函數的編譯會生成不一樣格式的名字)。使用例子以下static

c++使用c代碼:語言

/* c語言頭文件:cExample.h */
#ifndef C_EXAMPLE_H
#define C_EXAMPLE_H
int add(int x, inty);
#endifdi

/* c語言實現文件:cExample.c */
#include "cExample.h"
int add( int x, int y )
{
return x + y;
}


 // c++實現文件,調用add:cppFile.cpp
 extern"C" //以c語言的方式編譯和鏈接包含的代碼
 {
  #include"cExample.h"
 }
 int main(int argc, char* argv[])
 {
  add(2,3); 
  return0;
 }

c使用c++代碼:

//C++頭文件cppExample.h
#ifndef CPP_EXAMPLE_H
#define CPP_EXAMPLE_H
extern "C" int add(int x, int y);//以c語言的方式編譯和鏈接
#endif

//C++實現文件 cppExample.cpp
#include "cppExample.h"
int add(int x, int y)
{
  return x + y;
}

 /* C實現文件 cFile.c  extern int add(int x, int y);//使用外部函數  int main(int argc, char* argv[])  {   add(2, 3);    return0;  }

相關文章
相關標籤/搜索