操作员++;在C中的IF语句中

操作员++;在C中的IF语句中,c,C,我有这个: ... int charry = 0; if (l[charry++] == 'a'){ whatever; } ... 问题是:charry是否会增加,还是只要l[charry]==“a”的计算结果为true 提前谢谢。char是保留的关键字。程序甚至无法编译 编辑:在比较之前,将对==的两个操作数求值,因此会对表达式产生任何副作用。因此,charry将被修改 char是一个保留关键字。程序甚至无法编译 编辑:在比较之前,将对==的两个操作数求值,因此会对表达式产生任

我有这个:

...
int charry = 0;
if (l[charry++] == 'a'){
    whatever;
}
...
问题是:charry是否会增加,还是只要
l[charry]==“a”
的计算结果为true

提前谢谢。

char
是保留的关键字。程序甚至无法编译


编辑:在比较之前,将对
==
的两个操作数求值,因此会对表达式产生任何副作用。因此,
charry
将被修改

char
是一个保留关键字。程序甚至无法编译



编辑:在比较之前,将对
==
的两个操作数求值,因此会对表达式产生任何副作用。因此,
charry
将被修改

在if语句之后,它将绝对递增1。如果选择将变量命名为保留关键字以外的名称


如果像用户delnan在评论中解释的那样,在下一个序列点之前再次使用
Chary
,则会有未定义的行为。

在If语句之后,它绝对会增加1。如果选择将变量命名为保留关键字以外的名称


如果像用户德尔南在评论中解释的那样,在下一个序列点之前再次使用
chary
,您将有未定义的行为。

肯定是编译错误。至少是……试试看,你会知道的。这将花费更少的时间比张贴在这里。肯定编译错误。至少是……试试看,你会知道的。这比贴在这里要花更少的时间。我的天啊…我只是把它放在这里而不去想它。。。编辑。迂腐:副作用不一定发生在比较之前。在这一点上,它肯定会发生,但它可能会被推迟到下一次(这将是在比较之后)。所以,如果你做了一些更复杂的事情,比如
if(l[charry++]='a'&&charry==1)
你就会有未定义的行为。@delnan;我从来没有说过副作用会在“之前/之后”发生:)那又怎么样?仍然值得知道:-)我的上帝..我只是不假思索地把它放了。。。编辑。迂腐:副作用不一定发生在比较之前。在这一点上,它肯定会发生,但它可能会被推迟到下一次(这将是在比较之后)。所以,如果你做了一些更复杂的事情,比如
if(l[charry++]='a'&&charry==1)
你就会有未定义的行为。@delnan;我从来没有说过副作用会在“之前/之后”发生:)那又怎么样?仍然值得知道:-)是的,是的,你们太挑剔了(我很感激)。这是一个错误,我没有使用“char”作为名称,哈哈。“它将递增…在if语句之后”有点不精确:它将在读取
charry
的旧值和
if()
的分支决策之间的某个时间递增。至少就语言而言。当然,优化器可以将增量移动到几乎任何其他地方,只要代码的行为就像增量发生在
if()
的括号内一样。是的,是的,你们太挑剔了(我很欣赏)。这是一个错误,我没有使用“char”作为名称,哈哈。“它将递增…在if语句之后”有点不精确:它将在读取
charry
的旧值和
if()
的分支决策之间的某个时间递增。至少就语言而言。当然,优化器可以将增量移动到几乎任何其他地方,只要代码的行为类似于增量发生在
if()
的括号内。
int charry = 0;
if (l[charry++] == 'a'){
    whatever;
}
// charry is now 1