http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57714
--- Comment #9 from Manuel López-Ibáñez <manu at gcc dot gnu.org> --- I think what happens is that the preprocessor is trying to avoid breaking up a valid token like in: void foo(void) {re\ turn; } It would be an improvement if it ignored the \ between valid tokens boundaries even if there is no whitespace, but I think there is not going to be anyone sufficiently bothered to fix this ever. So unless you want to give it a try, let's leave this bug report closed. I added a note to the FAQ.