макросы с ++ с памятью? - PullRequest
       40

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

7 голосов
/ 24 марта 2010

Можно ли определить макросы

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;

Спасибо!

Ответы [ 4 ]

4 голосов
/ 24 марта 2010

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

#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 голосов
/ 24 марта 2010

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

2 голосов
/ 24 марта 2010

Не то, что вы на самом деле запрашиваете, но если бы 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;
0 голосов
/ 26 февраля 2012

это лучшее место для таких инструментов, как Cog , которые подходят к проблеме генерации кода с помощью интуитивного подхода к программированию с использованием Python. Вот как бы выглядел ваш код, используя его

/*[[[cog
# definitions ----
import cog
Foo = ''
def WriteFoo( value ):
    Foo = value

def ReadFoo():
    cog.outl(' %s; ' % Foo)

# generation ---
WriteFoo( 'hello' )
]]]*/
//[[[end]]]

some_code_block;

/*[[[cog 
ReadFoo() ]]]*/
hello;
//[[[end]]]

some_other_blocK;

/*[[[cog 
WriteFoo( 'world')
ReadFoo() ]]]*/
world;
//[[[end]]]


last_block;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...