为什么逗号运算符似乎不在我的代码中的"if"语句和"else"语句之间工作?

Rüp*_*ure 0 c if-statement comma sequence-points

我知道如下的语句(逗号代替分号)看起来很奇怪:

 if(a<b)printf("Hello\n"),a+=5,b/=5,printf("%d,%d",a,b);
Run Code Online (Sandbox Code Playgroud)

但它完全正常,我读过它是因为comma这里作为一个序列点.我可以理解这一点.但我只是不明白为什么以下失败然后我也使用了一个else:

  if(a<b)printf("Hi\n"),else printf("Bye\n"),a+=5,b/=5,printf("%d,%d",a,b);
Run Code Online (Sandbox Code Playgroud)

它给出了错误expected expression before 'else'.

为什么第二个语句会出错?在第一个语句中,我们看到它comma作为一个序列点.那么为什么它之前没有这样做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); 

}
Run Code Online (Sandbox Code Playgroud)

Jen*_*edt 5

逗号运算符需要表达式,而构造的else一部分if else不是表达式.因此,关键字后面的逗号else是语法错误.