在 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.cpp
和 GPS.cpp
中都包含 header。
或者像这样通过命令行定义 OS_TESTING
:g++ testing.cpp GPS.cpp -DOS_TESTING
.
我正在使用 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.cpp
和 GPS.cpp
中都包含 header。
或者像这样通过命令行定义 OS_TESTING
:g++ testing.cpp GPS.cpp -DOS_TESTING
.