2016-04-18 161 views
-10

以下代碼的行爲如何?以下代碼的行爲是什麼?

status.channel = 0; 

void a(void) 
{ 
    status.channel++; 
} 

void handler(void) 
{ 
    if (status.channel == 0) { 
     // do a 
     a(); 
    } else { 
     // do b 
    } 
} 

起初status.channel = 0,該if聲明是有效的。然後在常規,status.channel遞增,所以它等於1

我的問題是,當我走出if聲明,我評價else:在status.channel不再是0.這是否意味着,該代碼也運行else聲明?

+1

一個簡單的C書的搜索將回答這個問題。你做了什麼來自己回答你的問題?爲什麼它不起作用?堆棧溢出不是教程網站。 – Olaf

+0

拿一張紙和一支鉛筆。用句子寫下每行代碼實際說的內容(如果status.channel等於零,調用函數a,這會增加status.channel(它會爲1)else(例如if status.channel不爲零),做b「_)。有什麼不明白的地方? –

+0

並且不贊成使用非原型函數聲明。如果函數不帶參數,則使用'(void)'而不是'()'。因爲你的其他功能已經做到了。不要複製/粘貼各種來源的代碼,而是在使用代碼之前**理解代碼。並使用一致的編碼風格。 – Olaf

回答

4

if else的情況下,當ifTrue並且它被執行時,相應的else將不會被執行。

即使if塊中的語句更改了條件。

0

在這種情況下else語句不會運行。

1

if,if...elsenested if...else語句用於在C編程中做出一次性決定,即根據測試表達式執行一些代碼並忽略一些代碼。

如果if語句的括號中的表達式計算結果爲true,則else塊將不會執行。然而,如果在if語句的括號表達式求false然後else部分的語句塊中執行和if塊被跳過。

您可以運行使用printf函數來得到C編程的想法有關conditional statements一些實驗。