In questo contesto (applicato a un riferimento di parametro in una definizione di macro), il segno di cancelletto indica di espandere questo parametro nel testo letterale dell'argomento passato alla macro.
In questo caso, se si chiama PRINT(5)
l'espansione della macro sarà printf("5" "%d\n", 5);
che stamperà 5 5
; non molto utile; tuttavia se chiami PRINT(5+5)
l'espansione della macro sarà printf("5+5" "%d\n", 5+5);
che stamperà 5+5 10
, un po 'meno banale.
Questo stesso esempio è spiegato in this tutorial on the C preprocessor (che, per inciso, è il primo hit di Google per c macro pound sign).
Possibile duplicato di questo http://stackoverflow.com/questions/10676999/stringizing-operator – Omkant