ちょっとした質問: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++構文)、便宜上行われることがよくあります。