Dhr*_*tra 6 c syntax comma switch-statement comma-operator
int main()
{
switch(1,2)
{
case 1:printf("1");break;
case 2:printf("2");break;
default: printf("error");break;
}
}
Run Code Online (Sandbox Code Playgroud)
这在c中有效吗?
我认为它不应该,但是当我编译它时,它显示没有错误并产生输出2.
Sou*_*osh 13
是的,这是有效的,因为在这种情况下,它,是一个逗号运算符.
引用C11,章节§6.5.17,逗号操作员,(强调我的)
逗号运算符的左操作数被计算为void表达式; 它的评估与右操作数之间存在一个序列点.然后评估右操作数; 结果有它的类型和价值.
此(评估并)丢弃该左操作数,并且使用的右侧(值侧)之一.所以,上面的陈述基本相同
switch(2)
Run Code Online (Sandbox Code Playgroud)
只是详细说明,它不会使用两个值,因为您可能已经预期了,例如,切换1或2.