extern「c」の役割

6255 ワード

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

2 extern int myadd(int a, int b); 3 

4 int myadd(int a, int b) 5 { 6     return a+b; 7 }
 1 //.cpp    

 2 #include <iostream>

 3 using namespace std;  4 

 5 extern "C" int myadd(int a, int b);  6 

 7 int main()  8 {  9     cout << myadd(3, 7) << endl; 10     return 0; 11 }

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

2 extern "C" int myadd(int a, int b); 3 

4 int myadd(int a, int b) 5 { 6     return a + b; 7 }
 1 //.c    

 2 #include <stdio.h>

 3 

 4 extern int myadd(int a, int b);  5 

 6 int main()  7 {  8     printf("%d
", myadd(3, 7)); 9 return 0; 10 }

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

2 extern "C"

3 { 4     #include "myHead.h"

5 }

の方式でヘッダファイルを含み、このヘッダファイルに宣言された関数はすべてC方式でコンパイルされます.
 
原理补充:Cファイルの中で、上述の関数のコンパイルの后の関数の名前は_に似ていますmyaddの形式で、CPPのコンパイル後の関数名は_myadd_int_intの形式は,CPPがリロードをサポートするため,この方式でリロードの関数を区別する.