C プログラムから呼び出す必要がある C++ 関数を作成しました。Cから呼び出せるようにするためextern "C"
に、関数宣言に を指定しました。次に、C++ コードをコンパイルしましたが、コンパイラ (Dignus Systems/C++) が関数のマングル名を生成しました。したがって、どうやらextern "C"
.
これを解決するためextern "C"
に、関数定義に を追加しました。この後、コンパイラは C から呼び出し可能な関数名を生成しました。
技術的にはextern "C"
、関数宣言でのみ指定する必要があります。これは正しいですか?( C++ FAQにこれの良い例があります。) 関数定義でも指定する必要がありますか?
これを示す例を次に示します。
/* ---------- */
/* "foo.h" */
/* ---------- */
#ifdef __cplusplus
extern "C" {
#endif
/* Function declaration */
void foo(int);
#ifdef __cplusplus
}
#endif
/* ---------- */
/* "foo.cpp" */
/* ---------- */
#include "foo.h"
/* Function definition */
extern "C" // <---- Is this needed?
void foo(int i) {
// do something...
}
私の問題は、何かを誤ってコーディングした結果である可能性があります。または、コンパイラのバグを見つけた可能性があります。いずれにせよ、stackoverflow に相談して、技術的にどちらが「正しい」方法であるかを確認したかったのです。