------- Comment #1 from jakub at gcc dot gnu dot org 2009-10-19 08:13 ------- The lines are joined into a logical line, that's what the C standard requires. But where do you see requirement that everything on one logical line has to appear on the line in preprocessed output? The reason it is emitted on the next line is to give the second string literal token proper location. The tokens are separate and a compiler compiles both "foo" "bar" and "foo" "bar" the same (as it doesn't record the line numbers for the string literals at all). See PR41445 for why this change has been made.
If you care about this because you use the preprocessed output for something else, consider using -P option. That says you don't care about token locations. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41748