Написание макроса, при котором stati c отключен при тестировании - PullRequest
0 голосов
/ 13 июля 2020

У меня проблемы с написанием этого макроса. Я использую ceedling.

У меня есть файл "globals.h" со следующим кодом:

#ifndef globals
    #ifndef UNITY
        #define STATIC static
    #else
        #define STATIC
    #endif
    #define globals 1
#endif

Итак, здесь должно произойти то, что любой метод, использующий STATI C будет stati c, если код не тестируется с единством, иначе это будет не stati c.

Мой тестовый файл включает «unity.h», а затем включает «глобальные объекты» .h ", а затем включает" protocol.h ".

Тестируемый файл," protocol. c ", включает" globals.h ", а затем" protocol.h ".

Тестовый файл «test_protocol. c» включает «unity.h», затем «globals.h», затем «protocol.h».

Насколько я понимаю, сначала следует определить UNITY , тогда он будет от go до globals.h и определит STATI C как ничто, поскольку UNITY уже определено в UNITY.h

Однако поведение, которое я наблюдаю, таково, что независимо от того, что я да, я не могу заставить globals.h ввести эту #else директиву, и поэтому кажется невозможным определить STATIC как что-либо кроме static.

* 102 2 * Однако я знаю, что то, что я пытаюсь достичь sh, возможно, потому что многие люди рекомендуют эту стратегию и реализовали ее. Итак, что я делаю, что заставляет globals.h думать, что UNITY не определено, когда это так?

1 Ответ

0 голосов
/ 14 июля 2020

Ну, я знаю, что это не прямой ответ на ваш вопрос, но вместо проверки с помощью #ifndef UNITY вы можете передать флаг препроцессора при компиляции кода.

например,

g++ protocol.c -DBUILD_TYPE="not_test"

g++ test_protocol.c -DBUILD_TYPE="test"

, а затем отметьте global.h код как

#define TEST test
#define NOT_TEST not_test

    #ifndef globals
        #if BUILD_TYPE == NOT_TEST
            #define STATIC static
        #else
            #define STATIC
        #endif
        #define globals 1
    #endif
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...