我想知道是否可以构建一个 gnu C 宏,该宏扩展为一个标记列表(整数),这些标记是没有重复的宏的参数。可以假设参数的数量是固定的(目前)。即我想要类似的东西:
#define MAC(a,b,c) ???
扩展例如
MAC(1,2,1)
到1,2
. 参数没有排序,结果也不必排序。
根据下面的建议,我构建了一个示例,它基本上可以使用 p99 完成我想要的功能,包括:
#include <p99/p99_if.h>
#include <p99/p99_paste.h>
#define MAC2(a,b) double P99_PASTE2(myvar_, a) P99_IF_EQ(a,b)()(; double P99_PASTE2(myvar_, b))
#define MAC3(a,b,c) double P99_PASTE2(myvar_, a) P99_IF_EQ(a,b)()(; double P99_PASTE2(myvar_, b)) P99_IF_EQ(a,c)()(P99_IF_EQ(b,c)()(; double P99_PASTE2(myvar_, c)) )
MAC2(1,2);
MAC2(3,3);
MAC3(1,2,3);
MAC3(10,10,1);