【问题标题】:Having trouble with #ifndef in C++在 C++ 中使用 #ifndef 时遇到问题
【发布时间】:2015-02-01 14:46:38
【问题描述】:

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

【问题讨论】:

  • 在编译器的命令行中定义OS_TESTING,如g++ -DOS_TESTING ... 这将适用于所有正在编译的源文件,就像在每个文件中定义的第一件事一样。

标签: c++ ifndef


【解决方案1】:

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

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

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

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

#if !defined(MY_HEADER_H)
    #define MY_HEADER_H

    #define OS_TESTING
#endif

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-25
    • 2015-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多