C++ 移行ガイド

C 関数へのリンク

コンパイラは、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 リンケージを指定することはできません。そうした宣言は、大域のスコープでのみ行うことができます。