当编写 C 宏时,有一种技巧称为“序列迭代”。其看起来如下所示:
SEQUENCE指的是FUCTION_TABLE的参数,参数将逐个处理。但据我所知,在同一范围内,标记不会被扩展两次,因为它们已经被"涂成蓝色"了。当FUNCTION_TABLE_2被扩展时,宏FUNCTION_TABLE_1已经被涂成蓝色。那么为什么还会被扩展呢?
#define CAT(a, ...) PRIMITIVE_CAT(a, __VA_ARGS__)
#define PRIMITIVE_CAT(a, ...) a ## __VA_ARGS__
#define FUNCTION(name) void name();
#define FUNCTION_TABLE(seq) CAT(FUNCTION_TABLE_1 seq, _END)
#define FUNCTION_TABLE_1(x) FUNCTION(x) FUNCTION_TABLE_2
#define FUNCTION_TABLE_2(x) FUNCTION(x) FUNCTION_TABLE_1
#define FUNCTION_TABLE_1_END
#define FUNCTION_TABLE_2_END
FUNCTION_TABLE((x) (y) (z) (e))
SEQUENCE指的是FUCTION_TABLE的参数,参数将逐个处理。但据我所知,在同一范围内,标记不会被扩展两次,因为它们已经被"涂成蓝色"了。当FUNCTION_TABLE_2被扩展时,宏FUNCTION_TABLE_1已经被涂成蓝色。那么为什么还会被扩展呢?