Как комментировать значения в #ifdef в одном месте
Давайте представим, что у нас есть проект C++, который должен работать на нескольких платформах (например, arm/arm64), и нам нужно иметь специфические для цели значения для каждой из них.
Прямо сейчас мы делаем:
#ifdef PLATFORM_ARM
#define TIMEOUT_VALUE 0
#define OUR_MAGIC_VALUE 1
#elif PLATFORM_ARM64
#define TIMEOUT_VALUE 2
#define OUR_MAGIC_VALUE 3
#endif
где я могу разместить комментарий для каждого определенного имени, чтобы к нему можно было получить доступ из каждого определения?
Примечание: я не могу определить каждое значение в отдельном #ifdef, например
// a comment for TIMEOUT_VALUE
#ifdef PLATFORM_ARM
#define TIMEOUT_VALUE 0
#elif PLATFORM_ARM64
#define TIMEOUT_VALUE 2
#endif
// a comment for OUR_MAGIC_VALUE
#ifdef PLATFORM_ARM
#define OUR_MAGIC_VALUE 1
#elif PLATFORM_ARM64
#define OUR_MAGIC_VALUE 2
#endif
потому что у меня есть списки и деревья таких значений.
Спасибо.
Правка 1: например, у нас есть 6 целей, и 4 из них поддерживают функцию, поэтому мы пишем:
#if defined(ARM)
#define FEATURE 1
#elif defined(ARM64)
#define FEATURE 0
#elif define(MIPS)
#define FEATURE 1
etc... for other platforms.
тогда у меня есть код, который читает это определение где-то:
#if FEATURE
do something. Note that this part can't be described in a target specific file, because it can have the same implementation for several targets.
#endif
и теперь я хочу иметь место, чтобы описать в целом, что означает и делает эта ОСОБЕННОСТЬ.
1 ответ
Вы можете определить прокси-макрос и написать один комментарий для макроса, который будет использоваться конечным пользователем:
#ifdef PLATFORM_ARM
#define TIMEOUT_VALUE_IMPL 0
#define OUR_MAGIC_VALUE_IMPL 1
#elif PLATFORM_ARM64
#define TIMEOUT_VALUE_IMPL 2
#define OUR_MAGIC_VALUE_IMPL 3
#endif
// a comment for TIMEOUT_VALUE
#define TIMEOUT_VALUE TIMEOUT_VALUE_IMPL
// a comment for OUR_MAGIC_VALUE
#define OUR_MAGIC_VALUE OUR_MAGIC_VALUE_IMPL
Вы также можете рассмотреть возможность использования констант вместо макросов.