其他人可能感兴趣的一般问题:
我遇到了一个使用 switch 语句的 C++ 编译器优化 (Visual Studio 2005) 问题。我想知道的是是否有任何方法可以满足我的好奇心并找出编译器正在尝试但未能做到的事情。有没有我可以花一些时间(可能太多时间)破译的日志?
对于那些好奇地继续阅读的人来说,我的具体问题- 我想听听你对我为什么在这个具体案例中遇到问题的想法。
我有一个大约 500 行代码的小程序,其中包含一个 switch 语句。它的一些案例包含一些指针分配。
double *ptx, *pty, *ptz;
double **ppt = new double*[3];
//some code initializing etc ptx, pty and ptz
ppt[0]=ptx;
ppt[1]=pty; //<----- this statement causes problems
ppt[2]=ptz;
中间的语句似乎挂了编译器。编译永远不会结束。好的,我没等多久就走下大厅,和一些人交谈,喝杯咖啡然后回到我的办公桌,但这是一个通常在不到一秒钟内编译的小程序。删除一行(上面代码中指出的那一行),问题就消失了,就像删除优化时一样(在整个程序上或在函数上使用#pragma)。
为什么这条中间线会引起问题?编译器优化器不喜欢 pty。程序中的向量 ptx、pty 和 ptz 没有区别。我对 pty 所做的一切都是对 ptx 和 ptz 所做的。我尝试在 ppt 中交换他们的位置,但 pty 仍然是导致问题的行。
我问这个是因为我很好奇正在发生的事情。代码被重写并且工作正常。
编辑: 大约两周后,我检查了与我上面描述的代码最接近的版本,我无法将其重新编辑以使其崩溃。这真的很烦人,尴尬和恼火。我会再试一次,但如果我不能很快打破它,我想这部分问题已经过时了,我会删除它。真的很抱歉耽误了您的时间。