##運算符可以用於類函數宏的替換部分。另外,##還可以用於類型對象宏的替換部分。這個運算符把兩個語言符號組合成單個語言符號。例如,可以定義如下的宏:
#define XNAME(n) x##n
這樣,下面的宏調用:
XNAME(4)
會展開成下列形式:
x4
同樣在PG中很多宏就利用了##。
#define makeNode(_type_) ((_type_ *) newNode(sizeof(_type_),T_##_type_))
#define NodeSetTag(nodeptr,t) (((Node*)(nodeptr))->type = (t))
#define IsA(nodeptr,_type_) (nodeTag(nodeptr) == T_##_type_)
例如使用IsA(expr, RowExpr),T_##_type就是T_
RowExpr,在枚舉類型裏爲331,如果當前expr的type是
T_
RowExpr,即331,那麼就可以判斷當前expr是否爲
RowExpr了。