14

extern "C" を使用して次のような外部関数を宣言する C コードを取得しました。

extern "C" void func();

これは有効な C ですか? この行でエラーが発生していますが、これが原因なのか他の理由なのかわかりません。

4

3 に答える 3

31

いいえ、有効な 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
于 2009-04-04T20:19:09.107 に答える
12

これは、C 呼び出し標準を使用するようコンパイラ/リンカーに指示するための C++ 表記です。

通常、その行はプリプロセッサ ステートメントでラップされます。

#ifdef __cplusplus
extern "C" {
#endif

// stuff

#ifdef __cplusplus
}
#endif
于 2009-04-04T20:19:29.433 に答える
2

C では無効です。前処理後に存在する場合、標準に従って診断されます。

C++ の場合、これは名前マングリングになります。必要な理由の詳細については、こちらを参照してください。詳細を投稿できますか?

于 2009-04-04T20:19:30.307 に答える