解释这个C程序的工作

Jav*_*ram 1 c operators

请解释每种情况下的工作情况.

为什么两种情况都有相同的输出

案例I:

int main (void)
{
    int i = 5;
    if(i == ++i)           //plz explain here How values are checked
       printf("Equal");
    else
      printf("Not Equal");

  return 0;
}
//Output: Equal;
Run Code Online (Sandbox Code Playgroud)

案例二:

int main (void)
{
    int i = 5;
    if(++i == i)            //plz explain here How values are checked
       printf("Equal");
    else
      printf("Not Equal");

  return 0;
}
//Output: Equal;
Run Code Online (Sandbox Code Playgroud)

Jer*_*ock 10

这些程序都不是有效的; 如果没有序列点,则不允许读取和更新相同的变量.因此,这些程序中的任何一个都会执行未定义的行为,因此它们可能碰巧在编译器和机器上返回相同的答案这一事实并不意味着什么.

  • @Javed Akram:是的 - 未定义行为的一个可能结果是代码似乎正常工作,甚至可能产生您期望的结果.然后,它可能不会做任何一个.当然,最常见的结果是它似乎在测试中运行良好,然后在为客户端演示时做了一些可怕的事情. (7认同)