我认为预处理器逐个处理文件,我无法弄清楚如何使用包含文件,所以我认为这是不可能的,但听到其他人会很高兴想法。
我在a.cpp
:
#define A 1
我希望从2.cpp
使用它。
编辑: 我无法修改第一个文件。所以现在我只是复制了定义。但问题仍然存在。
答案 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&缺点:
(+):您可以为定义
使用一些值( - ):必须定义所有定义