可能重复:
谁能解释这些未定义的行为(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
我对这个结果感到惊讶。我对这个宏扩展有点困惑。
为什么会这样?请帮我找出原因。