小さな質問: C++のプログラムでCヘッダファイルを使用できますか?C++でのCコードの使い方
これは奇妙な質問かもしれませんが、基本的にはC++で他のプログラム(C言語で作成)のソースコードを使用する必要があります。一般的に両方のヘッダファイルに違いはありますか?たぶん私はいくつかのライブラリを変更する場合... 私はあなたが私を助けることを願っています。
小さな質問: C++のプログラムでCヘッダファイルを使用できますか?C++でのCコードの使い方
これは奇妙な質問かもしれませんが、基本的にはC++で他のプログラム(C言語で作成)のソースコードを使用する必要があります。一般的に両方のヘッダファイルに違いはありますか?たぶん私はいくつかのライブラリを変更する場合... 私はあなたが私を助けることを願っています。
はい、CヘッダーをC++コードに含めることができます。 CおよびC++ではないとして扱われるべきであるC++コンパイラは、など、その関数の宣言を知っているように、
#ifdef __cplusplus
extern "C"
{
#endif
// C header here
#ifdef __cplusplus
}
#endif
:それは、これを追加することが普通です。
extern "C" {
#include "c-header.h"
}
多くのCヘッダーはこれら#if defined __cplusplus
に包まれ、すでに含まれている:
はい、いますが、ヘッダからの宣言は、CはC++コンパイラに指示する必要があります。それはおそらく少し奇妙です(CヘッダーのC++構文)が、それはしばしば便宜のために行われます。
Cコードをプロジェクトの一部として一緒にコンパイルする場合は、C++コードでヘッダーファイルをインクルードし、C++コンパイラモードを使用してコードをコンパイルする必要があります。いくつかのCコードはC++コンパイラで「きれいに」コンパイルされません(例えば、malloc
の使用にはキャストが必要です)。
オンの場合、ライブラリやプロジェクトの一部ではない他のコードがある場合は、ヘッダがextern "C"
とマークされていることを確認する必要があります。そうでなければ、コンパイルされた名前の関数が適用されますが、これはCコンパイラが使用する命名規則と一致しません。
二つのオプションは、どちらかあなたが
#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++を混在させたC++ FAQのこのセクションは役立ちます:http://www.parashift.com/c++-faq/mixing-c-and-cpp.html –
C++ FAQのリンクを更新しました:https:/ /isocpp.org/wiki/faq/mixing-c-and-cpp – Phlucious