0

我正在使用 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 而没有定义它?如果是这种情况,我该怎么做才能解决它?

4

1 回答 1

2

是否有可能因为我在 GPS.cpp 中未包含的文件中有#define 而没有定义它?

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

如果是这种情况,我该怎么做才能解决它?

使用共享标头,如下所示:

#if !defined(MY_HEADER_H)
    #define MY_HEADER_H

    #define OS_TESTING
#endif

然后在testing.cpp和中包含标题GPS.cpp

或者OS_TESTING通过这样的命令行定义:g++ testing.cpp GPS.cpp -DOS_TESTING.

于 2015-02-01T14:51:59.683 回答