C语言扩展:以X宏作为参数

示例

通过将“ X”宏的名称作为主宏的参数,可以稍微概括一下X宏方法。这具有帮助避免宏名称冲突以及允许将通用宏用作“ 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宏中,“ X”名称是主宏的内置特征,采用这种样式,随后取消定义用作参数的宏可能是不必要的,甚至是不受欢迎的(PRINTSTRING在本示例中)。