C++extern「C」の使い方


C++の多くのコードでは、extren「C」のコードクリップがよく見られますが、その意味が分からない人が多いです.また、C/C++ではキーワード、extrenもよく見られます.そのため、このように多くの用法と理解上の混同をもたらした.
まずextrenキーワードについてお話しします.このキーワードはCにすでに存在し、変数を修飾するために使用されています.例:extren const int m_val;これは、他のファイルで定義されている変数をコンパイラに通知します.ここでは、この変数を現在のファイルで使用するために宣言拡張します.この使い方もモジュール間の通信を容易にするためです.
また、extren「C」は、この2つのキーワードを組み合わせると、2つの使い方があります.
    1.コンパイラに、現在の関数またはオブジェクトを通知し、C言語でコンパイルおよび実行します.なぜなら,C++はC言語に基づいてc言語のライブラリ関数をさらにカプセル化しているからである.C++のコードでC言語のライブラリ関数を使用する必要があります.したがって,この方式ではC言語コードと互換性がある.
    2.現在の関数が関数名を盗まないようにコンパイラに通知します.どういう意味ですか.C++には、近い機能を実現するために、同じ関数名、異なるパラメータリストという関数名のリロードメカニズムがあるからです.同じ関数名とは、プログラマーが読みやすいように、C++コンパイラでは、関数名に記号を追加します.例:
int Add(int a,int b);//     ,       Add_fun_a_b.
int Add(float a,float b);//     ,      Add_fun_floatab;

   
コンパイラが関数名を変更したくない場合はextren「C」を導入します.すなわち,コンパイラに,修飾された関数がコンパイルされた後も関数名が変更されないことを知らせる.
もちろん、2つ目は実際の使用では一般的ではありませんが、いくつかのdllの作成過程では、大量に現れます.
なぜこのような需要があるのでしょうか.これはC++デザイナーの上手さと柔軟性を称賛せざるを得ない.コンパイラメーカーによって、C++の実現方法が異なります.異なるコンパイラが同じ関数名を再ロードするルールは少し異なります.つまり、コンパイル後の関数名が異なります.dllでは、異なるコンパイラと互換性が必要なので、コンパイラのタイプが異なるため、関数のエントリが正しく位置決めできないという問題を遮断します.だから、このような使い方があるのです.