ちょっとした質問: C++ はプログラムで C ヘッダー ファイルを使用できますか?
これは奇妙な質問かもしれません。基本的に、C++ で他のプログラム (C 言語で作成された) のソース コードを使用する必要があります。一般に、両方のヘッダー ファイルに違いはありますか? たぶん、いくつかのライブラリを変更すると...助けていただければ幸いです。
ちょっとした質問: C++ はプログラムで C ヘッダー ファイルを使用できますか?
これは奇妙な質問かもしれません。基本的に、C++ で他のプログラム (C 言語で作成された) のソース コードを使用する必要があります。一般に、両方のヘッダー ファイルに違いはありますか? たぶん、いくつかのライブラリを変更すると...助けていただければ幸いです。
はい、C++ コードに C ヘッダーを含めることができます。これを追加するのが普通です:
#ifdef __cplusplus
extern "C"
{
#endif
// C header here
#ifdef __cplusplus
}
#endif
C++ コンパイラが関数宣言などを C++ ではなく C として扱う必要があることを認識できるようにします。
プロジェクトの一部として C++ コードと一緒に C コードをコンパイルする場合は、通常どおりヘッダー ファイルをインクルードし、C++ コンパイラ モードを使用してコードをコンパイルするだけで済みますが、一部の C コードは優先されます。 C++ コンパイラで「きれいに」コンパイルしないでください (たとえば、の使用にmalloc
はキャストが必要です)。
一方、プロジェクトの一部ではないライブラリまたはその他のコードがある場合は、ヘッダーが としてマークされていることを確認する必要がありますextern "C"
。そうでない場合、コンパイルされた関数名の C++ 命名規則が適用されます。これは、C コンパイラで使用される命名規則と一致しません。
ここには 2 つのオプションがあります。ヘッダー ファイル自体を編集するか、追加します。
#ifdef __cplusplus
extern "C" {
#endif
... original content of headerfile goes here.
#ifdef __cplusplus
}
#endif
または、これらのヘッダーを編集できない場合は、次のフォームを使用できます。
#ifdef __cplusplus
extern "C" {
#endif
#include <c_header.h>
#ifdef __cplusplus
}
#endif
はい。ただし、ヘッダーからの宣言が C であることを C++ コンパイラに伝える必要があります。
extern "C" {
#include "c-header.h"
}
多くの C ヘッダーには、これらが既に含まれており、#if defined __cplusplus
. これは間違いなく少し奇妙です (C ヘッダー内の C++ 構文) が、便宜上行われることがよくあります。