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

Yol*_*ola 10 c++ c-preprocessor

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

我有a.cpp:

#define A 1
Run Code Online (Sandbox Code Playgroud)

我想从中使用它2.cpp.

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

Luc*_*ore 19

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

你也可以

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

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

  • 我不得不接受一揽子声明的问题,即在标题中包含#define是最糟糕的方法!我不想成为每日WTF"啊,好吧,如果你在一个没有文件系统的嵌入式环境中等等",但肯定会出现#define比const int好得多的情况. (3认同)

sim*_*onc 8

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

mydefines.h:

#ifndef MY_DEFINES_H
#define MY_DEFINES_H

#define A (1)
// other defines go here

#endif // MY_DEFINES_H
Run Code Online (Sandbox Code Playgroud)

source1.cpp:

#include "mydefines.h"
// rest of source file
Run Code Online (Sandbox Code Playgroud)

source2.cpp:

#include "mydefines.h"
// rest of source file
Run Code Online (Sandbox Code Playgroud)

您还可以在编译器命令行中指定define.对于跨平台代码(可能需要不同编译器的不同命令行),这可能很难维护.