José D. José D. - 1 year ago 47
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 Source

According to the C Standard ( 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.