リンケージ指定 -- C++ 以外のプログラムへのリンク

C++C++ コード・フラグメントと C++ 以外のコード・フラグメントの間のリンケージは、言語リンケージ と呼ばれます。 すべての関数型、関数名、および変数名は、デフォルトで C++ の言語リンケージを持ちます。

リンケージ指定 を使用することによって、C など他のソース言語を使用して作成された オブジェクト・モジュールに、C++ オブジェクト・モジュールをリンクすることができます。構文は次のとおりです。

>>-extern--string_literal--+-declaration---------------+-------><
                           |    .-----------------.    |
                           |    V                 |    |
                           '-{----+-------------+-+--}-'
                                  '-declaration-'
 
 

string_literal は、特定の関数に関連したリンケージを指定するために使われます。リンケージ指定で使われるストリング・リテラルには、大/小文字の区別があることに注意してください。すべてのプラットフォームは、string_literal に以下の値をサポートしています。

 "C++" 
別に指定されていなければ、オブジェクトおよび関数では、これがデフォルトのリンケージ指定です。

 "C" 
C プロシージャーへのリンケージを示します。

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');
} 

関連参照

IBM Copyright 2003