C - Code::Blocks 13.12: 哪一个可以正常工作,或者两者都可以?两者有区别吗?或者它在 C 标准中是允许的?

C - Code::Blocks 13.12: Which one will work fine, or both? Is there a difference between both? Or it is allowed in C standard?

示例 1:

while(npw(x,i)/ftr(i)>0.00001) {
  t+=npw(x,i)/ftr(i);
  i++;                    //normal increase i
}

while(npw(x,i)/ftr(i)>0.00001)
  t+=npw(x,i++)/ftr(i++); //increase i inside function's parameters

示例 2:(x 是 'float')

int n=(int)x;                     //normal cast
printf("x! = %.0lf\n",ftr(n));

printf("x! = %.0lf\n",ftr((int)x)); //directly cast inside function parameters

t+=npw(x,i++)/ftr(i++);

可能不会做任何你期望它做的事情,因为这两个增量操作的执行顺序是未指定的。 IE。您不知道哪个函数将获得递增的 i,以及哪个函数将获得递增的 递增的 i 作为参数。

此外,无论i先递增哪个,它都将与之前的代码完全不同,其中i只递增一次。

其他示例看起来正确。最后两段代码仅在语义上有所不同。