10

我认为预处理器会一个一个地处理文件,我不知道如何处理包含,所以我认为这是不可能的,但很高兴听到其他人的想法。

我有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

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

我的定义.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

您还可以在编译器命令行中指定定义。不过,对于跨平台代码(对于不同的编译器可能需要不同的命令行)来说,这可能很容易维护。

于 2013-01-11T10:18:31.777 回答
4

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

于 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 回答