P
Peter Nilsson
Arthur J. O'Dwyer said:#define P(x) printf(#x
#define L(x) #x
#define S L(| |)[!Z]
int f(int l,int i){if((i=l,!Z)&&l==Z&&P(%c%c%d\n),S,S,Z)&&f
(++i,i)){}else if(--l==Z&&P(\n))&&f(++i,i)){}else if(--l==Z
The \ in \n is not at the end of a line, not part of a character or
string literal, not part of a universal character, not part of an
include header, and does not constitute a punctuator or other
preprocessor token.
Macro processing, including # stringising macros, is done in translation
phase 4; escape sequences are translated in phase 5.
But conversion to preprocessing tokens occurs in phase 3, by which
time an isolated backslash character like the one above is _not_ a
preprocessor token.