我认为预处理器会一个一个地处理文件,我不知道如何处理包含,所以我认为这是不可能的,但很高兴听到其他人的想法。
我有a.cpp
:
#define A 1
我想从2.cpp
.
编辑:我不能修改第一个文件。所以现在我只是复制了定义。但问题仍然存在。
我认为预处理器会一个一个地处理文件,我不知道如何处理包含,所以我认为这是不可能的,但很高兴听到其他人的想法。
我有a.cpp
:
#define A 1
我想从2.cpp
.
编辑:我不能修改第一个文件。所以现在我只是复制了定义。但问题仍然存在。
其他翻译单元看不到源文件中的定义。实现文件是单独编译的。
你可以
extern const int A = 1;
在实现文件中并在您想要使用它时声明它extern const int A;
。其中,我想说第一个选项可能是您可以使用的最差的选项。
如果要在两个源文件之间共享定义,请将其移动到头文件并包含两个源文件中的头文件。
我的定义.h:
#ifndef MY_DEFINES_H
#define MY_DEFINES_H
#define A (1)
// other defines go here
#endif // MY_DEFINES_H
源1.cpp:
#include "mydefines.h"
// rest of source file
源2.cpp:
#include "mydefines.h"
// rest of source file
您还可以在编译器命令行中指定定义。不过,对于跨平台代码(对于不同的编译器可能需要不同的命令行)来说,这可能很容易维护。
您需要将您的头文件放入#define
一个头文件中,然后#include
由两个 cpp 文件 d 。
就像一种方式 - 使用 extern const 变量。
例如:
file1.h(您将在其中使用定义)
extern const int MY_DEF;
#if (MY_DEF == 1)
//some another definitions
#endif
file2.h(您将在其中定义定义)
const int MY_DEF = 1
优点和缺点:
(+):您可以使用一些值来定义
(-):必须定义所有定义