36

ちょっとした質問: C++ はプログラムで C ヘッダー ファイルを使用できますか?

これは奇妙な質問かもしれません。基本的に、C++ で他のプログラム (C 言語で作成された) のソース コードを使用する必要があります。一般に、両方のヘッダー ファイルに違いはありますか? たぶん、いくつかのライブラリを変更すると...助けていただければ幸いです。

4

3 に答える 3

54

はい、C++ コードに C ヘッダーを含めることができます。これを追加するのが普通です:

#ifdef __cplusplus
extern "C"
{
#endif

// C header here

#ifdef __cplusplus
}
#endif

C++ コンパイラが関数宣言などを C++ ではなく C として扱う必要があることを認識できるようにします。

于 2013-07-03T12:32:03.163 に答える
19

プロジェクトの一部として 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
于 2013-07-03T12:37:23.263 に答える
15

はい。ただし、ヘッダーからの宣言が C であることを C++ コンパイラに伝える必要があります。

extern "C" {
#include "c-header.h"
}

多くの C ヘッダーには、これらが既に含まれており、#if defined __cplusplus. これは間違いなく少し奇妙です (C ヘッダー内の C++ 構文) が、便宜上行われることがよくあります。

于 2013-07-03T12:32:12.180 に答える