プリプロセッサはファイルを1つずつ処理していると思うのですが、インクルードでどうすればいいのか分からないので無理だと思いますが、他の方の考えをお聞かせいただければ幸いです。
私は持っていa.cpp
ます:
#define A 1
から使いたいです2.cpp
。
編集:最初のファイルを変更できません。だから今のところ、定義をコピーしただけです。しかし、質問はまだ開かれています。
プリプロセッサはファイルを1つずつ処理していると思うのですが、インクルードでどうすればいいのか分からないので無理だと思いますが、他の方の考えをお聞かせいただければ幸いです。
私は持っていa.cpp
ます:
#define A 1
から使いたいです2.cpp
。
編集:最初のファイルを変更できません。だから今のところ、定義をコピーしただけです。しかし、質問はまだ開かれています。
ソース ファイル内の定義は、他の翻訳単位には表示されません。実装ファイルは個別にコンパイルされます。
次のいずれかを実行できます
extern const int A = 1;
実装ファイルで、それを使用したいときに宣言してくださいextern const int A;
。これらのうち、最初のオプションはおそらく使用できる最悪のものだと思います。
2 つのソース ファイル間で定義を共有する場合は、それをヘッダー ファイルに移動し、両方のソース ファイルからそのヘッダーをインクルードします。
mydefines.h:
#ifndef MY_DEFINES_H
#define MY_DEFINES_H
#define A (1)
// other defines go here
#endif // MY_DEFINES_H
source1.cpp:
#include "mydefines.h"
// rest of source file
source2.cpp:
#include "mydefines.h"
// rest of source file
コンパイラ コマンド ラインで define を指定することもできます。ただし、クロス プラットフォーム コード (コンパイラごとに異なるコマンド ラインが必要になる場合があります) を維持するのは面倒です。
あなたは両方のcppファイルによってdされる#define
ヘッダーファイルにあなたを置く必要があります。#include
方法のように- extern const 変数を使用します。
例えば:
file1.h (定義を使用する場所)
extern const int MY_DEF;
#if (MY_DEF == 1)
//some another definitions
#endif
file2.h (定義を定義する場所)
const int MY_DEF = 1
賛否両論:
(+): 定義にいくつかの値を使用できます
(-): すべての定義を定義する必要があります