newb16 is right, the particular syntax used to specify pathnames is implementation-specific. However, I'm surprised "abc\foo.h" worked. I would have guessed that the sequence "\f" would have been replaced by the single nonprintable formfeed character -- at least that is what would happen if that string appeared in a line of C source code. In this case, the string appears in a line of preprocessor code. Perhaps the rules for parsing text are different there.
According to Harbison & Steele (C Reference Manual), "the file name is subject to trigraph replacement in Standard C and source-line continuation, but no other processing of the characters occurs."