2012-12-21 162 views
0

出於某種原因,Visual Studio將不會踏進這個代碼,我不能看到你正在使用的不是assignemnt的變量k和P爲什麼不能我踏進這個循環在Visual Studio

  for(int k=0; k<6; k++) 
      { 
       for(int p=0; p<6; p++) 
       { 
        if(k=0) 
        { 
         levelToDraw[k][p] = LevelOne[k][p]; 
        } 
        else 
        { 
         levelToDraw[k][p] = LevelOne[k-1][p]; 
        } 
       } 
      } 
+0

之前的任何代碼? –

+0

沒有什麼會導致休息等編譯器跳過它 – joncodo

+5

只是一邊注意:'如果(K = 0)'肯定不是你想要的。 – Voo

回答

6

從我所看到的

 for(int k=0; k<6; k++) 
     { 
      for(int p=0; p<6; p++) 
      { 
       if(k=0) 
       { 
        levelToDraw[k][p] = LevelOne[k][p]; 
       } 
       else 
       { 
        levelToDraw[k][p] = LevelOne[k-1][p]; 
       } 
      } 
     } 

是因爲k沒有明顯的副作用的無限循環總是重置爲零的循環中。 (注意意外的任務)。沒有可見副作用的無限循環在C++中是未定義的行爲。這意味着編譯器可以做任何事情。例如,它可以丟棄循環,這意味着你不能輸入它 - 這可能是發生了什麼事情。由於它是未定義的行爲,它甚至可能導致機器着火。

+0

呵呵,我完全錯過了編譯器優化它的真正原因:)你確實是對的 – Zeks

2

內容這條線比較:

if(k=0) 
+1

雖然這並不能回答他的問題。 – Voo

+3

編譯器可能正在優化循環看到沒有真正發生的事情,這就是爲什麼他不能... – Zeks

+0

@Zeks東西_does_發生 –

0

我想你應該ty if(k==0)

+0

這不是問題 –

0

如果編譯器很智能(k=0)將被優化,並且至少在指令級別上不能進入if

1

我想你錯過了一個「=」通過VOO

爲指向的語句必須if(k==0)

你的處理器的速度要快得多那麼你的破發點分析。當你的代碼到達該循環時,它已經完成,然後它可以檢查中斷點停止。如果你停止在循環上面的代碼,它將工作,但在循環中它不會由於處理的速度。嘗試在循環中添加睡眠,然後您可以進入循環。

1

由於您正在循環文字,編譯器可能會優化代碼。例如,它可以展開循環。

您可以嘗試關閉compiler optimizations進行驗證。

刪除像if (k=0)...這樣的行列式當然也可以幫助。

2

考慮升級警告等級C4706。我不記得確切的編譯器開關,但它可能是/ W14706。

相關問題