2013-10-20 68 views
2

這不是一個直接的編碼問題,沒有涉及特定的代碼。這是我一直在努力去理解的一個普遍問題。if語句和if語句之間的有效性檢查/變量保護檢查有什麼區別?

if語句和if語句之間的有效性檢查/變量保護檢查有什麼區別?

我問這個是因爲我的導師告訴我們在不使用if語句的情況下編寫函數(除了有效性檢查/變量保護檢查),我對它們之間的區別有點困惑。謝謝!

回答

1

聲明本身沒有特別的區別,只是在您使用該聲明的目的中。

如果您添加一個條件來查看輸入參數是否對您的規範有效(比如,索引是非負數,並且落在您的數組範圍內),那麼您的教師說他會接受您的解決方案。另一方面,如果您使用條件來計算函數的輸出,那麼教師不會認爲您的解決方案是可接受的。

請注意,C提供了一種確保參數有效性的替代方法 - 即assert功能。沒有明確的if,但該計劃將打破,如果條件被破壞:

void setArrayElementSafe(int *array, size_t size, size_t index, int newValue) { 
    assert(index < size); // End the program if index is outside bounds 
    array[index] = newValue; 
} 

一個簡單的測試,看看你的程序是可以接受與否是看你能不能用assert取代所有的if小號(你不必真的這樣做,只需通過你的代碼,並確保它是可能的)。

+0

所以像if(function(x,y)> 10)等等,會是不可接受的權利?而不是像if(result> 10)等。 – Karen

+0

@Karen我不知道細節,但它看起來像這兩個都是無效的(除非檢查'if(result> 10)'的目的是報告錯誤)。 – dasblinkenlight

2

沒有區別,只有一種if聲明。條件是在程序的結構上,而不是在if聲明的特定「類型」上。教師要求您不要引入不必要的if語句,除非檢查「警衛」變量,所以推測有一個過程,只有使用if才能解決任務。

0

沒有任何區別。陳述意味着是有效性檢查。 if沒有任何類型或類別的陳述。

1

我認爲如果您可以從您的代碼中刪除所有if聲明並且代碼仍能正常工作,那麼您需要遵守教師規則,只要您給出正確的輸入即可。換句話說,您允許的唯一if語句是用於檢查前提條件和假設的語句,但不是而是代碼的算法邏輯的一部分。