Pode me ajudar com um código curto que pode ser impress

#define q(k)main(){return!puts(#k"\nq("#k")");}
q(#define q(k)main(){return!puts(#k"\nq("#k")");})

Este código pode imprimir-se na tela, no entanto, tenho dificuldade em lê-lo, especialmente os dois # K, como funciona? Eu sei como # define q (k) 2 * k funciona, mas eu realmente não tenho idéia sobre esse código.Por favor, ajude-me a analisá-lo! obrigado!

questionAnswers(1)

yourAnswerToTheQuestion