как комментировать значения в #ifdef в одном месте - PullRequest
0 голосов
/ 07 ноября 2018

давайте представим, что у нас есть проект 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 Ответ

0 голосов
/ 07 ноября 2018

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

#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

Вы также можете использовать константы вместо макросов.

...