Cosa significa ## per il preprocessore C (C ++)?

Ho un programma in C :

#define f(g,g2) g##g2 main() { int var12=100; printf("%d",f(var,12)); } 

quando eseguo solo il preprocessore espande questo come

 { int var12=100; printf("%d",var12); } 

qual è il motivo per cui l’output è 100.

Qualcuno può dirmi come / perché il preprocessore espande var##12 to var12 ?