Token pasting. It literally glues together the two tokens on either side of it, to form what looks to the compiler like a new, single token:
pri ## ntf("Hello, world!\n");
Once you add the usual boilerplate to the above, it should compile and do the expected thing.