Согласно определению точки последовательности, точки последовательности являются «указанных точек в последовательности выполнения называемых точек последовательности, все побочные эффекты предыдущих оценок гарантируется полная»последовательность точек и побочные эффекты
Так в ниже программа, все побочные эффекты оператора ++
должны были быть выполнены до перехода ко второй части оператора &&
, то есть i
должен быть увеличен до 1, так как &&
является точкой последовательности.
#include<stdio.h>
int main()
{
int i=0,a;
a=i++&&1;
printf("%d",a);
getchar();
return 0;
}
Ожидаемые результаты:
1 (
1&&1=1
)
фактический выход:
Почему не i
приращение до 2-й части?
Использование тройной оператор также дает тот же результат:
#include<stdio.h>
int main()
{
int i=0,a;
a=(i++)?1:0;
printf("%d",a);
getchar();
return 0;
}
Тройной оператор также является точкой последовательности. Так не должно ли это давать результат 1 вместо 0?