关于自增运算符的困惑的答疑.docVIP

  • 4
  • 0
  • 约6.7千字
  • 约 7页
  • 2016-12-21 发布于河南
  • 举报
关于i++和++i的答疑 void main() { int i=8; printf(%d,%d,%d,%d\n, ++i, --i, i++, i--); } TC2.0编译的结果是:8,7,7,8 VC6编译的结果是:8,7,8,8 VS2005编译的结果是:8,8,7,8 这里我们可以看到,由不同的编译器产生了不同结果,可见这个问题是依赖编译器的理解和实现的。换句话说,对于i++和++i的处理本来就是非常具有歧义的,当然在自己应用中我相信也不会有任何程序员写出这样歧义的代码。但是作为一个问题,我们有必要分析一下不同编译器究竟如何理解i++和++i操作符的。 我们在学习C的时候,应该已经知道了i++和++i两者的区别,即“++”符号在i之前还是之后,决定了i自增操作和他的语句的执行顺序的关系。即i++,理解为i在其语句中取原始值,++i在其语句中取自增后的新值。这一点是毫无疑义的。但是问题在于,i++和++i在作为函数参数的时候,和进入调用堆栈的顺序之间有何关系呢?根据前面的程序结果,可见各个编译器的处理不同,那么造成这种不同的结果的原因是什么呢?我们从代码上无法看到差异,因此我们必须看汇编语言才能知晓,编译器到底把我们的代码翻译成了什么? 一、VC6函数调用分析 ; int i=8; mov DWORD PTR _i$[ebp], 8 ;

文档评论(0)

1亿VIP精品文档

相关文档