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