web-dev-qa-db-ja.com

C ++でCコードを使用する方法

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

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

27
SadSeven

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

#ifdef __cplusplus
extern "C"
{
#endif

// C header here

#ifdef __cplusplus
}
#endif

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

38
RichieHindle

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
14
Mats Petersson

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

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

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

8
unwind