Неопределенный вывод с префиксным оператором в 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)

Другие вопросы по тегам