[英]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.