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')
总是增加
i

v[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取代它的人要么毫无头绪,要么有我们无法解决的问题。谢谢,我一定会考虑到这一点!