José D. José D. - 2 months ago 8
C Question

Why does C not allow concatenating strings when using the ternary operator?

The following code compiles without problems:

int main() {
printf("Hi" "Bye");
}


However, this does not compile:

int main() {
int test = 0;
printf("Hi" (test ? "Bye" : "Goodbye"));
}


What is the reason for that?

Answer

According to the C Standard (5.1.1.2 Translation phases)

1 The precedence among the syntax rules of translation is specified by the following phases.6)

  1. Adjacent string literal tokens are concatenated.

And only after that

  1. White-space characters separating tokens are no longer significant. Each preprocessing token is converted into a token. The resulting tokens are syntactically and semantically analyzed and translated as a translation unit.

In this construction

"Hi" (test ? "Bye" : "Goodbye")

there are no adjacent string literal tokens. So this construction is invalid.