#include<stdio.h>
int main()
{
int a=4;
int b=4;
int c= a++ < ++b? 1 : 0;
printf ("%d",c);
}
It is known that there is a sequence point at ?
, which means that both the prefix and postfix operations have to be completed by that point. Also it is known(?) that b
is incremented before the comparison. However, is a
incremented before or after the comparison?
If it is incremented before the <
test, then the Boolean evaluates to false and c
is set to 0, else to true with c
being set to 1. In my compiler, it evaluates to true, which means a++
is performed after the comparison operation with c
being set to 1.
Is this behavior part of the specification though?
I modified it to
#include<stdio.h>
int main()
{
int a=4;
int b=4;
int d=2;
int c= a++ + d < ++b + d? 1 : 0;
printf ("%d",c);
}
and it still evaluates to 1. The postfix has to complete before the ?
, but does that really ensure that it happens after the comparison <
?