Автоинкрементное расширение макроса - PullRequest
2 голосов
/ 02 апреля 2012

Используя простые препроцессорные макросы C , можно создать что-то вроде:

INIT_BASE(0x100)                     // init starting number

#define BASE_A  GET_NEXT_BASE         // equivalent to #define BASE_A 0x101
#define BASE_B  GET_NEXT_BASE         // 0x102
#define BASE_C  GET_NEXT_BASE         // 0x103

Ответы [ 2 ]

3 голосов
/ 02 апреля 2012

Макросы не могут выполнять этот тип подсчета автоматически, но enum s может.

#define INIT_BASE 0x100
enum foo
{
    BASE_A = INIT_BASE + 1,
    BASE_B,
    BASE_C,
    ...
};

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

#define INIT_BASE  0x100
#define BASE_A    (INIT_BASE + 1)    // equivalent to #define BASE_A 0x101
#define BASE_B    (INIT_BASE + 2)    // 0x102
#define BASE_C    (INIT_BASE + 3)    // 0x103
3 голосов
/ 02 апреля 2012

Вы пробовали:

#define BASE_A  (INIT_BASE+1) // equivalent to #define BASE_A 0x101
#define BASE_B  (BASE_A+1)         // 0x102
#define BASE_C  (BASE_B+1)         // 0x103

?

...