这是2个代码示例:
int k,j=1;
int x[4]={5,14,25,47};
k = x[j] + ++j;
printf("%d, %d",j,k);
显示警告-“对'j'的操作可能未定义”,但输出为:2,16
然后我尝试了这个:
int k,j=1;
int x[4]={5,14,25,47};
k = x[j] +++j;
printf("%d, %d",j,k);
这不会发出任何警告,但是输出会有些混乱。输出-1,15为什么在第二种情况下j没有增加?
k = x[j] +++j;
是相同的
k = (x[j]++) +j;
同样,k = x[j] + ++j
是未定义的行为,因为未定义添加的评估顺序。除了允许编译器产生任何东西外,这两个片段都是对该行的合理解释:
j++;
k = x[j] + j;
和
j++;
k = x[j-1] + j;
通常,避免“聪明”。如果你不是100%,你在做什么肯定,不使用++
,并--
在更复杂的语句。在此之前或之后在单独的一行上执行递增或递减操作。这样可以为您省去很多麻烦。例如,您可以毫无疑问地毫无疑问地准确地说出什么吗?
while(*str++) {
/* Do something */
}
手段?恕我直言,这更清楚
while(*str) {
str++;
/* Do something */
}
当然,这会花费一行,减少行数可能是一件好事,但在这种情况下,我认为最好放心。在这种情况下,您也可以使用括号将其更清楚:*(str++)
如果您愿意,但我认为您的意思是正确的。
我实际上是在回答这是实际问题的地方:https : //stackoverflow.com/a/56522806/6699433
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句