Search code examples
cstringsyntaxconcatenationconditional-operator

Why does C not allow concatenating strings when using the conditional 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?


Solution

  • 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.