擴充套件將 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
)。