Действительно ли возможно определить макросы
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;
?
Спасибо!
Макросы не могут переопределять другие макросы, но вы можете сделать это вручную.
#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
не может быть инкапсулирована ни в какую другую известную мне структуру.
Это невозможно, так как макрос не должен содержать директив препроцессора.
Не то, что вы на самом деле просите, но если бы 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;