2014-05-06 136 views
0

我一直在試圖理解爲Z80微控制器編寫的C代碼。編碼器是自學的,不幸的是代碼缺乏風格和可讀性。除了充滿goto語句的代碼之外,它在整個地方的間距和對齊方面也非常混亂。檢查IF ELSE語句是否有效

我來了幾個IF ELSE聲明如下:

if(value1==1){ 
    code();   
}   
else 
if(value2==1) { 
    othercode(); 
} 

這是一樣的:

1.

if(value1==1){ 
    code();   
}   
else if(value2==1) { 
    othercode(); 
} 

2.

if(value1==1){ 
    code();   
}   
if(value2==1) { 
    othercode(); 
} 

所以在我承諾改變我最好檢查的所有代碼之前。

+2

它怎麼可能等同於第二個代碼?第二個代碼沒有'else'。 – Barmar

+2

你認爲C中的間距問題嗎?它沒有。 – Barmar

+0

如果代碼不可讀,請使用格式化器將其覆蓋。大多數IDE會爲你做這個。 – Barmar

回答

6

代碼1與原始代碼完全相同。你只是改變了縮進。

代碼2的行爲與原始代碼不同。

代碼1表示如果value1 == 1爲真,則執行code()否則檢查value2 == 1是否爲真,然後執行othercode()

雖然

代碼2只意味着如果value1 == 1爲真,則執行code()現在檢查value2 == 1爲真,則執行othercode()

因此,簡而言之,在第一種情況下,如果if塊的計算結果爲真,則不會檢查條件else。在第二種情況下,將在所有情況下檢查兩個if

+0

選擇此答案是因爲它突出顯示了不準確的示例代碼。 – alyeomans

1

選項1等同於原始代碼。

0
if(value1==1){ 
    code();   
}   
else if(value2==1) { 
    othercode(); 
} 

這類似於你給

if(value1==1){ 
    code();   
} 

else //這個人會檢查是否有一個說法,現在作爲下一個狀態是if,所以其類似於else if

代碼
if(value2==1) { 
     othercode(); 
    } 
0

代碼1與原始代碼完全相同。

2

前兩個是一樣的:

else 
if(value2==1) { 
    othercode(); 
} 

是一樣的:

else if(value2==1) { 
    othercode(); 
} 

這是不同的:

if(value1==1){ 
    code();   
}   
if(value2==1) { 
    othercode(); 
} 

在前兩種情況下,控制不會去在滿足if條件的情況下,else。但在最後一種情況下,它將始終檢查兩個if語句。