預處理符的粘合劑:##運算符 原

    ##運算符可以用於類函數宏的替換部分。另外,##還可以用於類型對象宏的替換部分。這個運算符把兩個語言符號組合成單個語言符號。例如,可以定義如下的宏:

    #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了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章