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在本示例中)。