在 C++ 中使用 #ifndef 时遇到问题

Having trouble with #ifndef in C++

我正在使用 WiringPi 为 Raspberry pi 创建一个软件。问题是如果 WiringPi 没有检测到 Raspberry Pi,它就会失败。因此,如果我想在不使用实际 Raspberry pi 的情况下进行一些单元测试,我必须检查常量并且在测试时不执行某些函数调用。

我有一个测试 cpp 文件,其中有我的 main() 函数,在文件顶部有 #define OS_TESTING。我将 类 分为头文件和 cpp 文件,因此在该文件中我包含了所需的头文件。

问题是我有一个名为 GPS.cpp 的 cpp 文件,这里我有 GPS.h 的代码。在 GPS.cpp 中,我执行了 #ifndef OS_TESTING,但它没有检测到它已经在 testing.cpp 中定义。

我的编译命令如下:

g++ testing.cpp GPS.cpp

是否可能因为我在 GPS.cpp 中未包含的文件中有 #define 而未定义?如果是这种情况,我该如何解决?

Is it possible that it does not get defined because I have the #define in a file not included in GPS.cpp?

是的,在源代码中定义只有文件范围。

if that is the case, what can I do to fix it?

使用共享 header,像这样:

#if !defined(MY_HEADER_H)
    #define MY_HEADER_H

    #define OS_TESTING
#endif

然后在 testing.cppGPS.cpp 中都包含 header。

或者像这样通过命令行定义 OS_TESTINGg++ testing.cpp GPS.cpp -DOS_TESTING.