繁体   English   中英

c中条件运算符内的增量运算符

[英]increment operator within conditional operator in c

我期望b为3。
这是未定义的行为吗? 还是可以预测结果?
但我认为b将是3。
和c将是2。我得到的输出是1 2 1
请解释

#include<stdio.h>
int main()
{
int a = 0;
int b = 1;
int c = (a++ >b++ )? a++ : b++;
printf("%d %d %d",a,b,c);
return 0;
}

这就是我所得到的,并且我同意一定会做到这一点。 在评估第一个操作数(条件)之后,在转到第二个或第三个操作数之前有一个序列点。 所以它是这样的:

(a++ >b++ )

计算结果为:

0 > 1

这是0。

之后, a为1, b为2。

由于它是错误的:

b++ 

被评估。 结果是2(分配给c ),然后b是3。

如果这是正确的代码,则说明您的编译器存在错误。 这甚至不是秩序的问题。 即使第三个操作数在第一个操作数之前求值(这是错误的), b仍应为3。

我使用的是GCC 4.6.3,但是在所有符合标准的编译器中,结果都是相同的。

它是定义好的行为,在?:的第一个操作数与第二个或第三个操作数之间有一个序列点。

因此,在评估a++ < b++ ,a = 1和b =2。然后选择第三个操作数。 因此,c被分配了b++ 所以c = 2 然后 b = 3。

C11标准说:

6.5.15条件运算符

对第一个操作数进行求值; 在它的评估与第二个或第三个操作数的评估(无论哪个被评估)之间都有一个序列点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM