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