【发布时间】:2017-10-15 02:22:04
【问题描述】:
在编写C宏时,有一个技巧叫“序列迭代”。如下所示:
#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))
序列,即FUCTION_TABLE的参数,将被一一处理。但是,据我所知,一个令牌不会在同一范围内扩展两次。因为它是“涂成蓝色的”。当 FUNCTION_TABLE_2 展开时,宏 FUNCTION_TABLE_1 已经被绘制。为什么还要扩容?
【问题讨论】:
-
@user694733 对不起,我的错。我修改了问题并添加了定义。