10

プリプロセッサはファイルを1つずつ処理していると思うのですが、インクルードでどうすればいいのか分からないので無理だと思いますが、他の方の考えをお聞かせいただければ幸いです。

私は持っていa.cppます:

#define A 1

から使いたいです2.cpp

編集:最初のファイルを変更できません。だから今のところ、定義をコピーしただけです。しかし、質問はまだ開かれています。

4

4 に答える 4

20

ソース ファイル内の定義は、他の翻訳単位には表示されません。実装ファイルは個別にコンパイルされます。

次のいずれかを実行できます

  • それらをヘッダーに入れてインクルードします
  • コンパイラのオプションを使用する
  • 正しい方法で実行してください -extern const int A = 1;実装ファイルで、それを使用したいときに宣言してくださいextern const int A;

これらのうち、最初のオプションはおそらく使用できる最悪のものだと思います。

于 2013-01-11T10:20:00.487 に答える
8

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 を指定することもできます。ただし、クロス プラットフォーム コード (コンパイラごとに異なるコマンド ラインが必要になる場合があります) を維持するのは面倒です。

于 2013-01-11T10:18:31.777 に答える
4

あなたは両方のcppファイルによってdされる#defineヘッダーファイルにあなたを置く必要があります。#include

于 2013-01-11T10:18:40.030 に答える
-1

方法のように- extern const 変数を使用します。

例えば:

file1.h (定義を使用する場所)

extern const int MY_DEF;

#if (MY_DEF == 1)
 //some another definitions
#endif

file2.h (定義を定義する場所)

const int MY_DEF = 1

賛否両論:

(+): 定義にいくつかの値を使用できます

(-): すべての定義を定義する必要があります

于 2014-04-24T20:22:17.030 に答える