The preprocessor understands enough of the C language to recognise that printf is a different identifier from p.

Roughly speaking, the preprocessor only substitutes p for P where the p is in a...