Возникли проблемы с #ifndef в C++

Я создаю программное обеспечение для Raspberry Pi, используя WiringPi. Проблема в том, что WiringPi потерпит неудачу, если не обнаружит Raspberry Pi. Поэтому, если я хочу выполнить какое-то модульное тестирование без использования реального Raspberry pi, я должен проверить константу и не выполнять некоторые вызовы функций, если я нахожусь в тестировании.

У меня есть тестовый файл cpp, где у меня есть функция main(), а в верхней части файла #define OS_TESTING. У меня есть классы, разделенные на файлы header и cpp, поэтому в этот файл я включаю необходимые файлы заголовков.

Дело в том, что у меня есть файл cpp с именем GPS.cpp и здесь у меня есть код для GPS.h. В GPS.cpp я делаю #ifndef OS_TESTING, но он не обнаруживает, что он уже был определен в testing.cpp.

Моя команда компиляции выглядит следующим образом:

g ++ testing.cpp GPS.cpp

Возможно ли, что он не будет определен, потому что у меня есть #define в файле, не включенном в GPS.cpp? если это так, что я могу сделать, чтобы это исправить?

1 ответ

Решение

Возможно ли, что он не будет определен, потому что у меня есть #define в файле, не включенном в GPS.cpp?

Да, определяет в исходном коде только область видимости файла.

если это так, что я могу сделать, чтобы это исправить?

Используйте общий заголовок, что-то вроде этого:

#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,

Другие вопросы по тегам