繁体   English   中英

优化switch语句时Visual Studio 2005 C编译器问题

[英]Visual Studio 2005 C compiler problem when optimizing a switch statement

其他人可能感兴趣的一般性问题

我碰到了一个,我相信,C ++ - 编译器优化(Visual Studio 2005)问题与switch语句。 我想知道的是,是否有任何方法可以满足我的好奇心并找出编译器正在尝试但未能做到的事情。 有没有我可以花一些时间(可能是太多时间)破译的日志?

那些好奇的人继续阅读我的具体问题 - 我想听听你为什么在这个具体案例中遇到问题的想法。

我有一个包含switch语句的大约500行代码的小程序。 它的一些案例包含一些指针赋值。

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没有区别。 我做的一切都是为了ptx和ptz。 我尝试在ppt中交换他们的位置,但pty仍然是引起问题的线。

我问这个是因为我很好奇发生了什么。 代码被重写并且工作正常。

编辑:差不多两周后,我查看了上面描述的代码最接近的版本,我无法编辑它以使其崩溃。 这真令人讨厌,令人尴尬和烦恼。 我会再试一次,但如果我不能很快打破它,我想这部分问题已经过时了,我会删除它。 真的很抱歉花时间。

如果你需要在不改变它的情况下使这个代码可编辑,可以考虑使用memcpyppt[1]赋值。 这应该至少编译好。 但是,您的问题似乎更像是源代码的另一部分导致此行为。

你也可以试试这个东西:

ppt[0]=ptx;
ppt[1]=pty; //<----- this statement causes problems
ppt[2]=ptz;

在另一个功能。 这也应该有助于编译器避免编译代码所采用的路径。

您是否尝试将pty重命名为其他内容(即pt_y)? 我遇到过几次(即变量“rect2”)某些名称似乎是“保留”的问题。

这听起来像编译器错误。 你试过重新订购线路吗? 例如,

ppt[1]=pty; 
ppt[0]=ptx;
ppt[2]=ptz;

如果你嘲笑分配的值(这将在你的代码中引入错误,但可能指示它的指针或数组是否是问题),例如:

ppt[0] = pty;
ppt[1] = ptz;
ppt[2] = ptx;

(或类似的)。

这可能是由于您声明ptx,pty和ptz,并将它们优化为使用相同的地址。 然后,此操作会在您的代码中导致编译器出现问题。

尝试

static double *ptx;
static double *pty;
static double *ptz;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM