C++ コード・フラグメントと
C++ 以外のコード・フラグメントの間のリンケージは、言語リンケージ と呼ばれます。
すべての関数型、関数名、および変数名は、デフォルトで C++ の言語リンケージを持ちます。
リンケージ指定 を使用することによって、C など他のソース言語を使用して作成された オブジェクト・モジュールに、C++ オブジェクト・モジュールをリンクすることができます。構文は次のとおりです。
>>-extern--string_literal--+-declaration---------------+------->< | .-----------------. | | V | | '-{----+-------------+-+--}-' '-declaration-'
string_literal は、特定の関数に関連したリンケージを指定するために使われます。リンケージ指定で使われるストリング・リテラルには、大/小文字の区別があることに注意してください。すべてのプラットフォームは、string_literal に以下の値をサポートしています。
C++ を考慮しないで作成された呼び出し側共用ライブラリーを使用するには、 #include ディレクティブを extern "C" {} 宣言内に指定する必要があります。
extern "C" { #include "shared.h" }
次の例では、C++ から呼び出される C 印刷関数を示します。
// in C++ program extern "C" int displayfoo(const char *); int main() { return displayfoo("hello"); } /* in C program */ #include <stdio.h> extern int displayfoo(const char * str) { while (*str) { putchar(*str); putchar(' '); ++str; } putchar('¥n'); }
関連参照