コンパイラは、C++ 関数名を符号化して、多重定義を可能にします。C 関数あるいは「C 関数を装った」C++ 関数を呼び出すには、extern “C” 宣言を使用して、この符号化を禁止する必要があります。次に例を示します。
extern "C" { double sqrt(double); //sqrt(double) は C リンケージを持つ }
このリンケージ指定によって sqrt() を使用するプログラムの意味が変わることはありません。sqrt() に対して、コンパイラが C の命名規則を使用することになるだけです。
C リンケージを持つことができるのは、複数の多重定義の C++ 関数のうちの 1 つだけです。つまり、C プログラムから呼び出す C++ 関数に C リンケージを使用することはできますが、使用できるのは、その関数の 1 つのインスタンスだけということになります。
関数定義の中で C リンケージを指定することはできません。そうした宣言は、大域のスコープでのみ行うことができます。