Как я могу проверить, что макрос используется в глобальной области имен? - PullRequest
3 голосов
/ 09 января 2020

Я хотел бы написать заголовок, который позволит мне объявить предпочтения с синтаксисом, похожим на:

declpref("some.pref.name", "description");

, который регистрирует some.pref.name с данным описанием в некотором глобальном реестре так что я могу легко проанализировать, какие настройки объявил мой код, установить их значения из разных источников и т. д. c.

Я бы, вероятно, сделал это с помощью какой-либо конструкции stati c перед основными волхвами c:

#define declpref(name, desc)                       \
    {                                              \
        static struct __pref {                     \
            __pref() {                             \
                register_preference(name, desc);   \
            }                                      \
        } __static_pref;                           \
    }

Проблема в том, что приведенный выше код не будет работать так, как я хочу, если используется в локальной области видимости:

void some_function() {
    declpref("some.pref", "description"); // won't register until some_function called
} 

Я думаю, что я ' m Хорошо с принудительным выполнением предпочтения объявлений в глобальной области / пространстве имен, так как в любом случае они должны быть глобально уникальными именами.

Как проверить область, в которой она была объявлена, и выдать ошибку?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...