C 为什么';t逗号运算符似乎在a";如果;声明及「;否则";代码中的语句?
我知道下面这样的语句(逗号代替分号)看起来很奇怪:C 为什么';t逗号运算符似乎在a";如果;声明及「;否则";代码中的语句?,c,comma,sequence-points,if-statement,C,Comma,Sequence Points,If Statement,我知道下面这样的语句(逗号代替分号)看起来很奇怪: if(a<b)printf("Hello\n"),a+=5,b/=5,printf("%d,%d",a,b); 它在'else'之前给出错误预期表达式 为什么第二条语句会出错?在第一条语句中,我们看到,逗号充当序列点。那么为什么它在else之前不这样做呢?导致错误的第二种情况有什么特殊之处?下面是我的完整程序: #include<stdio.h> int main(void) { int a=30,b=45;
if(a<b)printf("Hello\n"),a+=5,b/=5,printf("%d,%d",a,b);
它在'else'之前给出错误预期表达式
为什么第二条语句会出错?在第一条语句中,我们看到,逗号
充当序列点。那么为什么它在else
之前不这样做呢?导致错误的第二种情况有什么特殊之处?下面是我的完整程序:
#include<stdio.h>
int main(void)
{
int a=30,b=45;
//if(a<b)printf("Hello\n"),a+=5,b/=5,printf("%d,%d",a,b); //Works well
if(a<b)printf("Hi\n"),else printf("Bye\n"),a+=5,b/=5,printf("%d,%d",a,b);
}
#包括
内部主(空)
{
INTA=30,b=45;
//如果(a想象一下:
(a, b)
翻译为:
{
a;
return here b;
}
在本例中,return here
表示“插入此表达式的位置”。实际上,,
充当序列点
那么
if (a<b) printf("Hello\n"), a+=5, b/=5, printf("%d,%d",a,b);
被解释为
if(a<b) ( printf("Hi\n"),else printf("Bye\n"),a+=5,b/=5,printf("%d,%d",a,b) );
if(a查看if-ELSE语句的正确语法。编译器希望分号知道if结束。因此,您基本上是尝试在第一个if-ELSE语句中输入子if-ELSE语句,但没有新的if
if(a>=18 &a <=64)printf("adult\n");
else if(a<=17)printf("minor\n");
else printf("senior\n");
if(a>=18&a逗号运算符需要表达式,如果else
构造的else
部分不是表达式。因此,逗号后跟关键字else
是语法错误。在第二种情况下else没有匹配的如果,这里发生的是在prin之后tf(“Hi\n”),当else到达时,编译器只在if语句终止后才查找if,即else是否应该出现。因此它给出了错误。忘掉一切Python(或任何其他非C/C++语言)曾经教过你一个逗号,它是C和C++中的一个运算符。在这种情况下,它不仅仅是一个序列点问题。它是一个语言问题。你所陈述的语句的形成违反了C99第64.4条选择语句。@ WoZoCurig请把它放在一个答案中,连同标准的引文。@ R u Popel'的秃鹰。Jens实际上hit比我能/做的更简洁,imho,没错。语法破坏了与if-then-else的一致性,只是因为在else之前没有一个完成的语句,它就因为它的寂寞而悬在那里。我已经投票支持了他的答案。+1尽管看起来很简单,它是对的imho。I的语句结尾f部分永远不会结束,逗号链以else开头,因此无效。回答不错,先生。这可能也很有用:
if(a<b)printf("Hi\n"),else printf("Bye\n"),a+=5,b/=5,printf("%d,%d",a,b);
if (a < b)
{
printf("Hi\n");
else printf("Bye\n");
a += 5;
b /= 5;
return here printf("%d, %d", a, b);
}
if(a<b)printf("Hi\n"),else printf("Bye\n"),a+=5,b/=5,printf("%d,%d",a,b);
if(a<b) ( printf("Hi\n"),else printf("Bye\n"),a+=5,b/=5,printf("%d,%d",a,b) );
if(a>=18 &a <=64)printf("adult\n");
else if(a<=17)printf("minor\n");
else printf("senior\n");