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ファイル呼び出し:
.cppファイル定義の関数,.cファイル呼び出し:
ヘッダファイルで宣言すると、cファイルは正常にこのヘッダファイルを含む.cppファイルは
の方式でヘッダファイルを含み、このヘッダファイルに宣言された関数はすべてC方式でコンパイルされます.
原理补充:Cファイルの中で、上述の関数のコンパイルの后の関数の名前は_に似ていますmyaddの形式で、CPPのコンパイル後の関数名は_myadd_int_intの形式は,CPPがリロードをサポートするため,この方式でリロードの関数を区別する.
原理: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がリロードをサポートするため,この方式でリロードの関数を区別する.