扩展将 X 宏作为参数
通过使 X
宏的名称成为主宏的参数,可以将 X-macro 方法推广一点。这有利于避免宏名称冲突并允许使用通用宏作为 X
宏。
与 X 宏一样,主宏表示其重要性特定于该宏的项列表。在此变体中,可以像这样定义这样的宏:
/* declare list of items */
#define ITEM_LIST(X) \
X(item1) \
X(item2) \
X(item3) \
/* end of list */
然后可以生成代码来打印项目名称,如下所示:
/* define macro to apply */
#define PRINTSTRING(value) printf( #value "\n");
/* apply macro to the list of items */
ITEM_LIST(PRINTSTRING)
这扩展到这段代码:
printf( "item1" "\n"); printf( "item2" "\n"); printf( "item3" "\n");
与标准 X 宏相反,其中 X
名称是主宏的内置特性,使用这种样式后,可能不需要甚至不希望后来取消定义用作参数的宏(在本例中为 PRINTSTRING
)。