C/C++におけるextern"C"の役割分析

1794 ワード

C/C++プログラムではextern「C」がよく見られますが、これは重要な概念です.本稿では,C/C++におけるextern"C"の役割を例として述べる.皆さんの参考にしてください.具体的な分析は以下の通りである.
役割:CとC++の混合プログラミングを実現する.
原理:CとC++コンパイラでコンパイルすると、関数名が異なる名前にコンパイルされ、リンクフェーズの名前検索ではターゲットが見つかりません.後のインスタンスで詳しく説明します.
用法:①.cファイルに定義された関数,.cppファイルを呼び出す場合、この.cppファイルではextern「C」で関数を宣言します.②.逆に、.cppファイルで定義された関数,.cファイルを呼び出すには、同様に.cppファイルにextern"C"で宣言する.cファイルは通常のexternのみで宣言されます.
2つのソースファイルをそれぞれコンパイルする.oファイル、実行ファイルにリンクします.リンクoファイル生成実行ファイルの場合は、g++を使用する必要があります.
例:
ソースファイルで宣言されたヘッダファイルがありません
.cファイル定義の関数,.cppファイル呼び出し:

//.c       
extern int myadd(int a, int b);
int myadd(int a, int b)
{
  return a+b;
}


//.cpp    
#include 
using namespace std;
extern "C" int myadd(int a, int b);
int main()
{
  cout << myadd(3, 7) << endl;
  return 0;
}


.cppファイル定義の関数,.cファイル呼び出し:

//.cpp       
extern "C" int myadd(int a, int b);
int myadd(int a, int b)
{
  return a + b;
}


//.c    
#include 
extern int myadd(int a, int b);
int main()
{
  printf("%d
", myadd(3, 7)); return 0; }

ヘッダファイルで宣言すると、cファイルは正常にこのヘッダファイルを含む.cppファイルは

//.cpp       
extern "C"
{
  #include "myHead.h"
}


の方式でヘッダファイルを含み、このヘッダファイルに宣言された関数はすべてC方式でコンパイルされます.
原理补充:Cファイルの中で、上述の関数のコンパイルの后の関数の名前は_に似ていますmyaddの形式で、CPPのコンパイル後の関数名は_myadd_int_intの形式は,CPPがリロードをサポートするため,この方式でリロードの関数を区別する.
本文で述べたことは皆さんのC++プログラム設計に一定の参考価値があると信じています.