Não há um erro de sintaxe? Deve printf (“um” “, dois e” “% s. \ N”, “três”); ser código válido?

Dê uma olhada neste código:

#include <stdio.h>

#define _ONE "one"
#define _TWO_AND ", two and "
int main()
{
    const char THREE[6] = "three" ;
    printf(_ONE _TWO_AND "%s.\n", THREE );
    return 0;
}

oprintf é efetivamente:

printf("one" ", two and " "%s.\n", "three" );

e a saída é:

um, dois e três.

gcc não dá erro nem mensagens de aviso depois de compilar este código. É ogcc compilador supostamente funciona dessa maneira, ou é um bug?

questionAnswers(3)

yourAnswerToTheQuestion