簡體   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