2014-04-21 56 views
5

在接下來的兩段代碼,根據編譯和運行的速度實際上有什麼不同?是否繼續即時?

for (int i = 0; i < 50; i++) 
{ 
    if (i % 3 == 0) 
     continue; 

    printf("Yay"); 
} 

for (int i = 0; i < 50; i++) 
{ 
    if (i % 3 != 0) 
     printf("Yay"); 
} 

個人而言,在有一個以上的打印語句多很多的情況下,我使用第一種方法,以減少對包含代碼的縮進量一直。一直想知道一段時間,所以我發現它是否真的具有視覺效果。

回覆阿爾夫(我不能讓代碼中的註釋工作...)

更準確的我的用法是沿着「handleObjectMovement」功能線的東西,其中將包括

for each object 
    if object position is static 
     continue 

    deal with velocity and jazz 

for each object 
    if object position is not static 
     deal with velocity and jazz 

相比,因此我不使用的回報。從本質上講,「如果它不是有關本次迭代,移動的」

+0

我認爲首先在一個函數中處理瑣碎的情況或錯誤情況,使用'return'來**救市**,沒問題。但是「繼續」意味着代碼的讀者必須使用額外的努力來分析。請記住,編寫源代碼並不是要向編譯器傳達它應該做什麼,而是要與其他人或後來的自己溝通你的*意圖*。 –

+3

一個好的編譯器應該將等價源優化成相同的彙編代碼。在任何特定情況下是否真的發生這些事情取決於事先必須知道的太多事情。那麼你爲什麼不自己檢查一下呢?檢查生成的程序集和/或測量時間,你會得到你的答案。 –

+0

兩個原因布蘭科,第一個是壞的,但第二個我覺得是相當不錯的:P 1)我懶 2)有這些類型的問題只是一個谷歌的離開是非常有用的。現在,其他任何奇蹟般的人都有一個SO頁面,他們可以去。 – Randomman159

回答

8

的行爲是一樣的,所以運行速度應該是一樣的,除非編譯器一些愚蠢的事(或除非禁用優化)。

這是很難說是否有在編譯速度的差異,因爲它依賴於編譯器如何解析的細節,分析和翻譯兩個變化。

如果速度是重要的,衡量它。

1

如何擺脫完全的檢查?

for (int t = 0; t < 33; t++) 
{ 
    int i = t + (t >> 1) + 1; 

    printf("%d\n", i); 
} 
+1

我覺得他真的問的是編譯器的行爲沒有這個特殊的代碼 – gbtimmon

+1

^作爲gbtimmon說。 – Randomman159

+1

不過,通過編寫更智能的代碼,您會驚訝繼續的多少用途可以被刪除。你腦子裏有不同的,更復雜的例子嗎? – fredoverflow

相關問題