是否可以使用其他cpp文件中的#define?

时间:2013-01-11 10:16:59

标签: c++ c-preprocessor

我认为预处理器逐个处理文件,我无法弄清楚如何使用包含文件,所以我认为这是不可能的,但听到其他人会很高兴想法。

我在a.cpp

#define A 1

我希望从2.cpp使用它。

编辑: 我无法修改第一个文件。所以现在我只是复制了定义。但问题仍然存在。

4 个答案:

答案 0 :(得分:18)

其他翻译单元看不到源文件中的定义。实现文件是单独编译的。

你可以

  • 将它们放在标题中并包含它
  • 使用编译器的选项
  • 在实现文件中以理智的方式执行 - extern const int A = 1;,并在您想要使用它时声明它extern const int A;

其中,我会说第一个选项可能是您可以使用的最差选择

答案 1 :(得分:8)

如果要共享两个源文件之间的定义,请将其移至头文件并包含两个源文件中的标头。

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。对于跨平台代码(可能需要针对不同编译器的不同命令行),这可能很难维护。

答案 2 :(得分:4)

您需要将#define放在一个头文件中,然后由两个cpp文件#include d。

答案 3 :(得分:-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

Pro&缺点:

(+):您可以为定义

使用一些值

( - ):必须定义所有定义