C++ 我想知道在使用调试器visual studio代码进入if语句之前,是否可以检查if语句的计算结果

C++ 我想知道在使用调试器visual studio代码进入if语句之前,是否可以检查if语句的计算结果,c++,c,debugging,C++,C,Debugging,我有一个我正在研究的C代码,老实说,我不明白它到底是如何工作的(我以前从未使用过像这样的if语句)。代码如下: #include<stdio.h> int main(int argc, char const *argv[]) { int x = 2, y = 0; if (x = ++y) { printf("%d is equal to %d\n", x,y); } else { printf("%d is not

我有一个我正在研究的C代码,老实说,我不明白它到底是如何工作的(我以前从未使用过像这样的if语句)。代码如下:

#include<stdio.h>

int main(int argc, char const *argv[])
{
int x = 2, y = 0;
  if (x = ++y)
  {
    printf("%d is equal to %d\n", x,y);
  }
  else
  {
    printf("%d is not equal %d", x, y);
  }
}
#包括
int main(int argc,char const*argv[]
{
int x=2,y=0;
如果(x=++y)
{
printf(“%d等于%d\n”,x,y);
}
其他的
{
printf(“%d不等于%d”,x,y);
}
}

出于某种原因,赋值运算符似乎也充当相等运算符?因为当它计算X时,X是1,Y是1,因此它将进入第一个实体,在if里面。但是,如果我执行
x=y++
,它将转到第二条语句。只是让我有点困惑,因为平等不是应该是
=
而不是
=

以下是您代码的语义修复:

#include<stdio.h>

int main(int argc, char const *argv[])
{
int x = 2, y = 0;
  if (x = ++y)
  {
    printf("y has been incremented and copied to x, which is now non-zero\n");
  }
  else
  {
    printf("y has been incremented and copied to x, which is now zero\n");
  }
}
#包括
int main(int argc,char const*argv[]
{
int x=2,y=0;
如果(x=++y)
{
printf(“y已递增并复制到x,现在为非零\n”);
}
其他的
{
printf(“y已递增并复制到x,现在为零\n”);
}
}

#包括
int main(int argc,char const*argv[]
{
int x=2,y=0;
如果(x=y++)
{
printf(“y已复制到x,然后y递增,x现在为非零(y为非零)\n”);
}
其他的
{
printf(“y已复制到x,然后y递增,x现在为零(y为零)\n”);
}
}


作为一般原则,我主张使用Yoda表达式,其中不可赋值的值放在左边,例如
if(1==x)
。这可以防止意外赋值。

请阅读增量前后运算符(++)的操作。赋值(
=
)也是一个运算符并具有结果。谁打了这个密码?这能回答你的问题吗。它精确地解释了这个用例。@rioV8这是一个大学作业,要弄清楚这个代码将输出什么以及为什么输出。我只是被卡住了,无法真正理解,因为我从未在if语句中使用赋值运算符。使用运算符优先级,找出这些表达式的作用:
a=b=c=d=3
a=1+b=1+c=1+d=3
@rioV8我相信对于第一个表达式,它会先将d赋值给3,然后从右向左赋值给cd和b到c和a到b。对于第二个,我想它是d=3,然后d+1,所以c是4,然后b是5,a是6。我想。在第二种情况下,我不确定。好吧,澄清一下,因为在第一种情况下,x等于1,在C中,这等于真。赋值运算符和++y发生在条件的前面。严格地说。如果(x),则条件为
,其余为计算条件之前的操作。对吗?所以在第二种情况下,因为x是0,
if(x)
将是false是。别忘了对答案进行投票,并查看C/C++常见问题解答和站点教程
#include<stdio.h>

int main(int argc, char const *argv[])
{
int x = 2, y = 0;
  if (x = y++)
  {
    printf("y has been copied to x and then y incremented, x is now non-zero (y was non-zero)\n");
  }
  else
  {
    printf("y has been copied to x and then y incremented, x is now zero (y was zero)\n");
  }
}