下面的代码编译没有问题:
int main() {
printf("Hi" "Bye");
}
但是,这不能编译:
int main() {
int test = 0;
printf("Hi" (test ? "Bye" : "Goodbye"));
}
是什么原因呢?
"Hi"
并且"Bye"
是字符串常量,而不是字符串作为C标准库使用。使用字符串文字,编译器将进行连接"H\0i" "B\0ye"
。与sprintf(buf,"%s%s", "H\0i" "B\0ye");
a (some_condition ? + : - ) b
printf("Hi" ("Bye"));
不起作用,也不需要三元运算符。括号就足够了(尽管printf("Hi" test ? "Bye" : "Goodbye")
也不会编译)。字符串字面量后面只能有数量有限的令牌。逗号,
,右方括号[
,右方括号]
(如1["abc"]
—是的,这是令人讨厌的),右方括号)
,右方花括号}
(在初始化程序或类似上下文中)和分号;
是合法的(以及另一个字符串文字);我不确定还有其他人。