重複のないマクロの引数であるトークン (整数) のリストに展開する 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);