>>550
__typeof__()が通常のマクロと同じように扱えるのなら、

#define dcat(a, b) a##b
#define cat(a, b)  dcat(a, b)
#define hoge(__p) cat(hoge_, __typeof__(__p)) (__p)