2016-12-06 57 views
-1

是什麼C-for循環怪異

for(;i;) 

for(;;) 

C編程是什麼意思?

for(;i;) 
printf("hjj"); 

在上述程序中會發生什麼?

int i=1; 
for(;;) 

編譯器是否會進入循環?

回答

4

for(;;)是一個無限循環。當i的值變爲0時,for(;i;)將終止。

在你的情況,

int i=1; 
for(;;) 

的將是一個無限循環,直到內部塊,跳出循環。

1

讓我們擊穿了for聲明(見C standard 6.8.5.3):

for (clause-1 ; expression-2 ; expression-3) statement 

for(;;) 

你會忽略初始化語句(條款-1)和循環體表達式(表達式-3),並且我假設您很清楚這些意思就是沒有任何操作。

控制部分是中間的一個,表達式-2。該表達式在每次迭代開始時被評估爲真或假。如果它的計算結果爲真,則執行下一次迭代。現在我回去the standard

省略的表達-2是由非零常數代替。」

正如你可能知道,一個「非零常數」計算結果爲真在布爾環境。因此:

for (;;) 

等效到:

while (1) 

因此該循環將繼續迭代,一個無限循環,除非break被執行或一個外部中斷(如<CTRL>C)進行干預。

所以,採取更進了一步:

for(;i;) 

取決於i值。如果i非零,那麼你又有一個無限循環,但是如果i爲零(假),那麼循環根本就不會迭代。

+1

感謝您的詳細解釋,清除了我的概念:) –