2013-07-18 56 views
0

我有一個關於正確使用語法的快速問題,基本上我試圖將這兩個if語句彙總到一個if語句中。在使用&&運算符和2個變量的if語句中正確使用語法

if (sc.LastCallToFunction) { 
    if (p_LowRectanglesList != NULL) { 
     free(p_LowRectanglesList); 
     sc.PersistVars->i1 = 0; 
    } 
    if (p_HighRectanglesList != NULL) { 
     free(p_HighRectanglesList); 
     sc.PersistVars->i2 = 0; 
    } 
    return; 

難道是語法正確重寫此爲:

if (sc.LastCallToFunction) { 
    if (p_LowRectanglesList || p_HighrectangleList != NULL) { 
     free(p_LowRectanglesList && p_HighRectanglesList); 
     sc.PersistVars->i1 && sc.PersistVars->i2 = 0; 
    } 
    return; 

或者將編譯器不會接受這種/我是錯誤的邏輯?

+2

你的邏輯是非常錯誤的。 – juanchopanza

+1

非常非常錯誤... –

+0

你幾乎不應該在C++中調用free()。你應該很少使用刪除。看起來「RAII」 - 它會使一切變得更好。 –

回答

0

你不能做到這一點,你已經給

if (p_LowRectanglesList || p_HighrectangleList != NULL) 

方式這個邏輯OR第一指針(把它當作真或假)與seond指針的比較爲NULL

free(p_LowRectanglesList && p_HighRectanglesList); 

這在邏輯上& & s指針在一起,然後嘗試釋放該操作的結果。也就是說,你想釋放「真」或「假」

sc.PersistVars->i1 && sc.PersistVars->i2 = 0; 

這個邏輯與這兩個東西放在一起,這將導致真或假,然後改掉分配0給它.....沒有按根本沒有任何意義。

此外,在原始代碼....免費後,你應該把p_LowRectanglesList=NULL;

+0

我看,所以如果我將它改寫爲: if((p_LowRectanglesList!= NULL)||(p_HighRectanglesList!= NULL)) 這是我的問題的合法語法解決方案嗎? – Orbital

+0

這是正確的if語句的語法,但它並沒有幫助你...你仍然需要獨立檢查每個指針,並分別釋放每個指針。如果陳述只是告訴你這兩個指針中至少有一個不爲空。那沒太大用處。您需要檢查每個指針以查看其非空,如果它不爲空,則釋放它。 –

+0

雖然這是問題,但在C#中,如果我使用&檢查兩者,並且如果使用&&它將停止檢查第一個是否滿足該條件。 在這種情況下,我真的非常努力地找到合適的C++語法。爲了我的程序的目的,這個語法應該綽綽有餘,因爲如果其中一個指針不爲空,剩下的就會運行。 它不是我真的需要結合我發佈的兩個聲明,它只是我正在尋找更優雅的方式來編碼,我堅持語法。任何建議,因爲我無法找到任何東西在cplusplus.com – Orbital