Il codice seguente viene compilato senza problemi:
int main() {
printf("Hi" "Bye");
}
Tuttavia, questo non compila:
int main() {
int test = 0;
printf("Hi" (test ? "Bye" : "Goodbye"));
}
Qual è il motivo?
"Hi"e "Bye"sono stringhe letterali , non stringhe come usate nella libreria standard C. Con i valori letterali stringa , il compilatore si concatenerà "H\0i" "B\0ye". Non è la stessa cosa consprintf(buf,"%s%s", "H\0i" "B\0ye");
a (some_condition ? + : - ) b
printf("Hi" ("Bye"));non funzionerà - non richiede l'operatore ternario; la parentesi è sufficiente ( printf("Hi" test ? "Bye" : "Goodbye")anche se non viene compilata). È disponibile solo un numero limitato di token che può seguire una stringa letterale. Virgola ,, parentesi quadra aperta, parentesi quadra [chiusa ](come in 1["abc"]- e sì, è raccapricciante), parentesi quadra chiusa, parentesi graffa )chiusa }(in un inizializzatore o contesto simile) e punto e virgola ;sono legittimi (e un'altra stringa letterale); Non sono sicuro che ce ne siano altri.