C および C++ では、シンボルテーブル中で大文字と小文字の区別が保持されますが、Fortran ではデフォルトで保持されません。この違いには注意を払う必要があります。幸いなことに、Fortran 宣言子の ATTRIBUTES ALIAS オプションを使用することで、名前の不一致を解消したり、大文字・小文字の区別を保持したり、また、名前の大文字・小文字自動変換を無視できます。
C++ は、C と同じ呼び出し規則と引数渡しの手法を使用しますが、命名規則に関しては、C++ の外部シンボルの修飾のために違いがあります。C++ のコードが .cpp ファイル (統合開発環境で C/C++ のファイルを選択したときに作成されるファイル) に存在する場合、外部名に C++ の名前修飾セマンティクスが適用されるため、リンカーエラーが頻繁に発生します。extern "C" の構文を使用することにより、C++ モジュールは名前の修飾を行わず、他の言語とデータおよびルーチンを共有することができます。
次の例では、prn を C の命名規則を使用して外部関数として宣言しています。この宣言は C++ のソースコードでよく見られます。
extern "C" { void prn(); }
Fortran で書かれた関数を呼び出すには、関数を C と同じように宣言し、参照指定として "C" を使用します。例えば、C++ から Fortran 関数の FACT を呼び出すには、次のように宣言します。
extern "C" { int fact( int* n ); }
extern "C" 構文を使用することにより、C++ から他の言語への呼び出しを調整したり、他の言語から呼び出される C++ ルーチンの命名規則を変更することができます。ただし、extern "C" は C++ からしか使用できません。C++ コードが extern "C" を使用しておらず、コードを変更することもできない場合は、名前の修飾を判断し、他の言語から生成することしか C++ ルーチンを呼び出す手段はありません。修飾方式がバージョン間で変更されないという保証がないので、このようなアプローチは最後の手段としてのみ使用するようにしてください。
extern "C" の使用には、次の制限があります。
extern "C" でメンバー関数を宣言することはできません。
多重定義された関数では、1 つのインスタンスに対してのみ extern "C" 構文を指定できます。多重定義された関数のその他のインスタンスは C++ の参照を持ちます。