extern "C" を使用して次のような外部関数を宣言する C コードを取得しました。
extern "C" void func();
これは有効な C ですか? この行でエラーが発生していますが、これが原因なのか他の理由なのかわかりません。
いいえ、有効な C ではありません。C コードで定義された関数を参照するために C++ コードでのみ使用する必要があります。/ブロックで囲むextern "C"
必要があります。ifdef __cplusplus
#endif
// For one function
#ifdef __cplusplus
extern "C"
#endif
void func();
// For more than one function
#ifdef __cplusplus
extern "C"
{
#endif
void func1();
void func2();
#ifdef __cplusplus
}
#endif
これは、C 呼び出し標準を使用するようコンパイラ/リンカーに指示するための C++ 表記です。
通常、その行はプリプロセッサ ステートメントでラップされます。
#ifdef __cplusplus
extern "C" {
#endif
// stuff
#ifdef __cplusplus
}
#endif
C では無効です。前処理後に存在する場合、標準に従って診断されます。
C++ の場合、これは名前マングリングになります。必要な理由の詳細については、こちらを参照してください。詳細を投稿できますか?