C 在if条件下发生了什么?

C 在if条件下发生了什么?,c,C,我的一个朋友问我这个代码,我和他都无法发现,在if条件下发生了什么。你们能解释一下这种情况是怎么发生的吗 int main() { int i; if (i = (1, 2, 0)) printf("Mehrose"); else printf("Hello "); printf("%d\n", i); return 0; } 此代码的输出是表达式中的Hello 0 i=(1,2,0) 您使用的是,它计算其所有操作数,并生成其最

我的一个朋友问我这个代码,我和他都无法发现,在if条件下发生了什么。你们能解释一下这种情况是怎么发生的吗

int main()
{
   int i;

   if (i = (1, 2, 0))
       printf("Mehrose");
   else
       printf("Hello ");

   printf("%d\n", i);

   return 0;
}
此代码的输出是表达式中的Hello 0

i=(1,2,0)
您使用的是,它计算其所有操作数,并生成其最右边的操作数的结果-此处为0。 所以0被分配给i

这相当于如果i=0,它将0赋给i,并产生i的值,该值为false,因此它在else分支中打印字符串。

在表达式中

i=(1,2,0)
您使用的是,它计算其所有操作数,并生成其最右边的操作数的结果-此处为0。 所以0被分配给i


因此,它相当于if i=0,它将0分配给i,并产生i的值,该值为false,因此它在else分支中打印字符串。

首先,当编译器看到我们得到的代码时格式化:

int main(void)
{
   int i;
   if(i=(1,2,0))
      printf("Mehrose");
   else 
      printf("Hello");
   printf("%d\n",i);
   return 0;
}
if语句可以细分为:

,则首先求值,放弃运算符的左侧。这对每个操作员重复:

ifi=1,2,0

ifi=2,0

ifi=0

=为i赋值0,并返回表达式的右侧:

如果0

回想一下,0被评估为false是falsy,1被评估为true是truthy。因此,第一个条件失败,执行第二个块。Hello被打印到标准输出流,后跟0


首先,当编译器看到我们得到的代码时进行格式化:

int main(void)
{
   int i;
   if(i=(1,2,0))
      printf("Mehrose");
   else 
      printf("Hello");
   printf("%d\n",i);
   return 0;
}
if语句可以细分为:

,则首先求值,放弃运算符的左侧。这对每个操作员重复:

ifi=1,2,0

ifi=2,0

ifi=0

=为i赋值0,并返回表达式的右侧:

如果0

回想一下,0被评估为false是falsy,1被评估为true是truthy。因此,第一个条件失败,执行第二个块。Hello被打印到标准输出流,后跟0


你可能想知道它是如何工作的,你可能想知道它是如何工作的。