以下是引用我菜119在2011-11-14 21:56:08的发言:
你那个最后的i怎么还能输出个13,求解释啊?????呵呵!再怎么整,那也不应该是13,难道不是4吗?你用的是什么编译器?呵呵!
i最后输出13,很正常啊。c语言函数默认采用__cdecl调用约定是没错,但这个只是一个框架,只是针对于 栈的布局来讲才有意义。 通常栈是向低地址生长,foo(a,b,c)这样的函数用常规思维思考的话,一般把a b c的地址依次增加,因此就有 c先入栈 然后是b 再是a 的假象. __cdecl只是保证a b c的地址依次增加,而不是入栈顺序是按c b a.其实完全也可以按b a c或 a b c.
在谷歌上输入关键字 "C语言 序列点 副作用" 就会明白
printf ("%d %d", i, ++i)是未定义的行为,
printf ("%d %d", ++i, j)是符合标准C的语句。