Путаница с расширением Macro [дубликаты]

Возможный дубликат:
Может ли кто-нибудь объяснить это неопределенное поведение (i = i ++ + ++ i, i = i ++ и т. Д.)
Какие проблемы может принести приложению следующий макрос?

Я написал пример приложения с расширением макросов для его реализации в iOS (код Objective C).

Это что-то вроде:

#define SQUARE(x) ( x * x )
main( )
{
   int i = 3, j, k ;
   j = SQUARE( i++ ) ;
   k = SQUARE( ++i ) ;
   printf ( "\nValue of i++ = %d\nValue of ++i = %d", j, k ) ;
}

Выход был:

Value of i++ = 9
Value of ++i = 49

Ожидаемый результат был:

 Value of i++ = 9
 Value of ++i = 25

Я удивлен этим результатом. Я немного запутался с этим расширением макроса.

Почему это произошло? Пожалуйста, помогите мне найти причину.

Ответы на вопрос(3)

Ваш ответ на вопрос