extern "C"
C関数として定義する必要のある関数に指定すべきではないのはなぜですか?ファイルをCソースとしてコンパイルすると、コンパイラにどのような影響がありますか?
Cコンパイラに影響がない場合は、#ifdef __cplusplus
チェックを外して、以下のようにヘッダーファイルに関数を定義するだけではいけませんか?
extern "C" {
int MyFunc();
}
別の質問への回答は、が必要であると言ってい#ifdef
ますが、理由がわかりません。
#2に関して:__ cplusplusは、C++コンパイラーを介して実行されているすべてのコンパイル単位に対して定義されます。一般に、これは.cppファイルとその.cppファイルに含まれるすべてのファイルを意味します。同じ.h(または.hhまたは.hppまたはwhat-have-you)は、異なるコンパイル単位に含まれている場合、異なる時点でCまたはC++として解釈される可能性があります。.hファイル内のプロトタイプがCシンボル名を参照するようにする
extern "C"
場合は、C ++として解釈されるときに持つ必要があり、Cextern "C"
として解釈されるときに持つべきではありません。したがって、#ifdef __cplusplus
チェックします。