макросы C++ с памятью?

Действительно ли возможно определить макросы

write_foo(A);
and
read_foo();

так, чтобы:

WRITE_FOO(hello);

code_block_1;

READ_FOO();

code_block_2;

READ_FOO();

WRITE_FOO(world);

code_block_3;

READ_FOO();

code_block_4;

READ_FOO();

расширяется в:

code_block_1;
hello;
code_block_2;
hello;

code_boock_3;
world;
code_block_4;
world;

?

Спасибо!

7
задан anon 24 March 2010 в 08:11
поделиться

3 ответа

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

#define FOO hello

FOO // expands to hello

#undef FOO
#define FOO world

FOO // expands to world

#undef FOO
#define FOO blah

FOO // expands to blah

К сожалению, комбинация #define + #undef не может быть инкапсулирована ни в какую другую известную мне структуру.

4
ответ дан 7 December 2019 в 01:19
поделиться

Это невозможно, так как макрос не должен содержать директив препроцессора.

4
ответ дан 7 December 2019 в 01:19
поделиться

Не то, что вы на самом деле просите, но если бы WRITE_FOO было определением, вы могли бы получить что-то похожее (без контекста я просто повторно использую имена, даже если они не так ясно о намерениях):

#define READ_FOO() WRITE_FOO

#define WRITE_FOO hello
code...[1]
READ_FOO();
code...[2]
#define WRITE_ROO world
code...[3]
READ_FOO();

// will expand to:
code...[1]
hello;
code...[2]
code...[3]
world;
2
ответ дан 7 December 2019 в 01:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: