-
-
[讨论]VC++ Debug和Release版本运行结果不一致的思考。
-
发表于:
2014-9-15 13:36
9356
-
[讨论]VC++ Debug和Release版本运行结果不一致的思考。
最近在测试解指针运算符[*]和后置自增运算符[++]的优先顺序时,无意发现了一个问题。
我的一段代码,在VS 2013 的Debug和Release版本中的运行结果不一致。
猜测之前版本应该也是这样。先上代码:
int _tmain(int argc, _TCHAR* argv[])
{
int arr[3] = { 7, 18, 32 };
int *p1 = arr;
printf("*p1++:%d,%d\n", *p1++, *p1);
getchar();
return 0;
}
Debug版本结果:
*p1++:7,18
Release版本结果:
*p1++:7,7
这个问题算不算VC++的Bug呢?
个人认为是编译器优化的原因,但是又不清楚其原理,请大牛们指教。
另外我查的资料显示解指针运算符[*]和后置自增运算符[++]是同一优先级,并且是从右至左结合。
那么按理说第一个应该打印成18才对。但是
MSDN上又说
后缀运算符在表达式计算中具有最高优先级。不知道怎么判断了。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)