v[i+;+;]在C中没有定义吗?
我正在尝试编写一个函数,该函数通过一个v[i+;+;]在C中没有定义吗?,c,C,我正在尝试编写一个函数,该函数通过一个char*a[]检查a,并经常使用类似 if(a[i] == 'x'){ i++; //... } 现在我真的想把它改成a[I++],但它似乎不起作用 问题: 我在这里是做错了什么,还是有一个干净的选择来避免I++ 注意:目前函数中13行中有3行是i++,这使得它看起来比实际大很多 if(a[i++]=='x')本身在C语言中是可以的。但是,语义上是不同的:如果条件为真,您的原始代码只会增加i,而if(a[i++]='x')总是增加iv[i
char*a[]
检查a,并经常使用类似
if(a[i] == 'x'){
i++;
//...
}
现在我真的想把它改成a[I++]
,但它似乎不起作用
问题:
我在这里是做错了什么,还是有一个干净的选择来避免I++
注意:目前函数中13行中有3行是
i++
,这使得它看起来比实际大很多 if(a[i++]=='x')
本身在C语言中是可以的。但是,语义上是不同的:如果条件为真,您的原始代码只会增加i
,而if(a[i++]='x')
总是增加iv[i++]
如果v[i],则不是未定义的
不是未定义的,i++
不会导致有符号整数溢出
if(a[i++] == 'x'){
...
}
如果不等同于
if(a[i] == 'x'){
i++;
...
}
因为每次执行时,前一个包含i
,
但后者仅当a[i]='x'
为真时才包含i
++i
是避免i++
的另一种选择。请注意,++i
的值不同于i++
(++i)-1
可能有用。你能在它不起作用的地方添加一个例子吗?不幸的是,这只是我几周前遇到的一个问题,一直无法找到关于它是否合法的任何信息。在与我的室友讨论时,他也有类似的问题,所以我决定问它是否合法。如果我今天再次遇到问题,我会回到这里;)它不是未定义的,但有不同的语义。它不是未定义的,但通常是不好的实践。在过去的几周里,我已经发现了一些这样的C
问题,人们都在这样做,这是导致意外故障的最终原因。考虑重构代码,使用< <代码> > <代码>循环。这可能是一行或两行额外的代码,但将为您节省大量的麻烦,并在以后的过程中重新编写。祝你好运!谢谢,我一定会考虑的!(++i)-1
比i++
好多少?我不认为(++i)-1
比i++
好多少。对于那些讨厌i++
@MikeCAT的人来说,它只是一个替代品,而那些讨厌i++
并因此用(++i)-1取代它的人要么毫无头绪,要么有我们无法解决的问题。谢谢,我一定会考虑到这一点!