現在、私はライブラリをCヘッダーファイルに含めることを試みています。私に含める何Cヘッダー定義順序/位置
#ifndef SIMULATE_H
#define SIMULATE_H
#ifdef __cplusplus
extern "C" {
#endif
#define RAM_SIZE 16320
#define STRING_SIZE 10
#define BUFFER_SIZE 100
long final_hex[RAM_SIZE];
char zero[STRING_SIZE];
char stringValue[STRING_SIZE];
char buffer[BUFFER_SIZE];
char checksum[BUFFER_SIZE];
#ifdef __cplusplus
}
#endif
#endif /* SIMULATE_H */
「#include <math.h>
」である:ここで は、元のコードは次のようになります。それは非常に簡単なはずですが、私はここにいくつかの疑問を持っている:このコードは、CおよびC++の両方のヘッダファイルにすることができます
どういう意味:私はここにライブラリを含めると
#ifdef __cplusplus extern "C" { #endif
、 「
extern "C"
」の前か後に置かなければなりませんか?注文はここで彼らのために重要ですか?
「」をこのヘッダーに含める必要がある理由はありません。 'simulate.h'ヘッダー自体の宣言のどれも' 'ヘッダーを必要としないので、' simulate.h'を含むすべてのファイルは ' '言い換えれば、それは小さな利便性になります。通常は、コンパイル時間を制御し続けるために、ヘッダーを最小限に抑え、自己完結型にします。それはまだ賢明かもしれませんが、それが賢明であることは明らかではありません。 –
はい、コードは、ヘッダがCとC++の両方からの使用を意図していることを意味します。しかし、それは不思議です。関数がないので、 'extern" C "'が何かをしていることは明らかではありません。グローバル変数はタイプセーフなリンケージのためにマングルされていません。 –
「アドオン」を明確にしてください。 'simulate.c'のコードが' 'で宣言された関数を呼び出す場合、Cソースにはヘッダーではなく' 'が含まれていなければなりません。外部ヘッダー(ここでは 'simulate.h')を他のソースファイルで使用できるようにするために必要な他のヘッダーだけを含めるべきです。 'simulate.c'だけが必要とするものは' simulate.c'によって直接インクルードされるべきです。 'simulate.c'に' extern void dump_simulation(FILE * fp、const char * tag、const SimulationState * sim_state);という関数があった場合、 ''をインクルードして 'FILE '。 –