2010-08-16 27 views

回答

12

常量條件通常足夠簡單的錯誤。試想一下:

unsigned k; 
... 
while (k>=0) 
{ 
... 
} 

條件k>=0纔有意義,如果K值是一個符號整數,但不能無符號。一位粗心的開發人員忘記了k被宣佈未簽名,他/她會使用它,好像它可以用作負數。編譯器試圖提供幫助,並警告你這個問題,並且編譯器會落入相同的問題類中。 for(;;)是首選,因爲它明確指`循環永遠

+0

提及常見的簽名錯誤。 :-) – 2010-08-16 05:51:19

+3

編譯器非常聰明;足夠聰明地做各種魔法,但不夠聰明,不能理解「while(true)」不受這些問題的影響? – 2014-10-21 15:29:54

8

for(;;)while (true)是,前者定義是一個無限循環的特殊情況不同的,而後者是有點濫用的說:「真的,永遠。」

you don't want them非常糟糕時,會出現無限循環的警告,因此警告您可能在第一個符號處有一個循環。但是通過使用for(;;),你幾乎明確地說過「永遠循環」,並且沒有什麼可警告的。

我不認爲GCC有相應的警告。

+0

謝謝。這就說得通了。 – 2010-08-16 05:40:53

相關問題