web-dev-qa-db-ja.com

C以外のC ++リンケージ言語?

C++言語では、C++とCの両方を1つのソースファイルに混在させることができます。例えば、

extern "C" {
    struct bar { /* ... */ }
}

C++またはC以外の他の「リンケージ言語」をサポートしたことはありますか?例えばextern "Pascal"またはextern "Haskell"

25
dkaranovich

extern "C"のみが必要な場合があります。

すべての実装は、Cプログラミング言語「C」で記述された関数へのリンケージ、およびC++関数「C++」へのリンケージを提供するものとします。

ただし、他の人はこの引用に従って存在することができます:

文字列リテラルは、必要な言語リンケージを示します。この国際標準は、文字列リテラル「C」および「C++」のセマンティクスを指定します。 「C」または「C++」以外の文字列リテラルの使用は、実装で定義されたセマンティクスで条件付きでサポートされます。 [注:したがって、実装では不明な文字列リテラルを使用したリンケージ仕様には、診断が必要です。 — end note] [注:文字列リテラルのスペルは、その言語を定義するドキュメントから取得することをお勧めします。たとえば、ヴィンテージに応じて、ADA(ADAではない)やFortranまたはFORTRANなどです。 —エンドノート]

17
aaronman

多くの(ほとんどの)環境では、 "extern" C "がシステム上の任意の言語のデフォルトのリンク規則です。

したがって、オペレーティングシステムと「外部」言語の実装に応じて、「extern C」は別のコンパイル済み言語でプログラムを呼び出すために必要なすべてです。

9
James Anderson

ある時点でサポートされているG ++ extern "Java" GCJでコンパイルしたJavaコードと対話します。

https://stackoverflow.com/questions/15167867/extern-Java-block-in-gcc

7
Sebastian Redl