是什麼C-for循環怪異
for(;i;)
和
for(;;)
C編程是什麼意思?
for(;i;)
printf("hjj");
在上述程序中會發生什麼?
int i=1;
for(;;)
編譯器是否會進入循環?
是什麼C-for循環怪異
for(;i;)
和
for(;;)
C編程是什麼意思?
for(;i;)
printf("hjj");
在上述程序中會發生什麼?
int i=1;
for(;;)
編譯器是否會進入循環?
for(;;)
是一個無限循環。當i
的值變爲0
時,for(;i;)
將終止。
在你的情況,
int i=1;
for(;;)
的將是一個無限循環,直到內部塊,跳出循環。
讓我們擊穿了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
爲零(假),那麼循環根本就不會迭代。
感謝您的詳細解釋,清除了我的概念:) –