Неопределенный вывод с префиксным оператором в C
#include<stdio.h>
int main()
{
int i=2;
printf("%d %d\n",++i,++i);
return 0;
}
Выход 4 4 на GCC. Пожалуйста, объясните этот вывод
1 ответ
Это неопределенное поведение. Порядок оценки параметров функции не определяется стандартом C.
Соответствующие разделы: C99 Раздел 6.5.2.2 Пункт 10
Порядок вычисления обозначения функции, фактических аргументов и подвыражений внутри фактических аргументов не определен, но перед фактическим вызовом есть точка последовательности.
также в С99, раздел 6.5.2.2, пункт 10
Существует точка последовательности после оценки указателя функции и фактических аргументов, но перед фактическим вызовом. Каждая оценка в вызывающей функции (включая другие вызовы функций), которая иначе специально не упорядочена до или после выполнения тела вызываемой функции, определяется неопределенным образом по отношению к выполнению вызываемой функции.94)