G
Size: a a a
G
G
SP
S
SP
G
#define EVAL(x) x
#define EMPTY
#define MAP(x) x + MAP_INDIRECT EMPTY (x)
#define MAP_INDIRECT(x) x + MAP (x)
EVAL(MAP(1))
G
G
MAP(1)
= X + MAP_INDIRECT (x)
MAP_INDIRECT
за вызов макроса, потому что после него EMPTY
, т.е. не круглые скобкиG
EVAL
, то он рекурсивно раскрывает аргументы и получается 1 + MAP(1)
S
G
EVAL(EVAL(EVAL...)
сделаем, то он будет столько раскрывать, сколько EVAL
G
p
G
DF
DF
p
p
DF