return語句放入迴圈的指導原則:如果能增強**的可讀性就是用return,用防衛子句來簡化複雜的錯誤處理
混亂的**,遮蓋了正常執行路徑:
if(file.validname())
}}
使用防衛子句,澄清正常路徑的**:
if(file.validname())
if(file.open())
if(encrypyionkey.valid())
losts of code
遞迴:當問題的小部分很容易解決,而問題又很容易分解成眾多的小部分時,常常會用到遞迴。對於小範圍的問題,使用遞迴會帶來簡單、優雅的解,對於大多數問題,它所帶來的解將會是極其複雜的,使用簡單的迭代通常會比較容易理解。
遞迴的例子:
boolean function findpaththroughmaze ( maze_t maze , point position )
使用遞迴的技巧:
1、確認遞迴能夠停止:有判斷遞迴退出的語句
2、使用安全計數器防止出現無窮遞迴:在子程式中如果超出了遞迴呼叫次數安全上限,就強制退出
3、留心棧空間:防止出現棧越界
4、不要用遞迴去計算階乘或者斐波納契數列:使用for迴圈簡單的,就不要去使用遞迴
1、使用多種程式設計方式替代goto:
(1)巢狀使用if語句
(2)用乙個狀態標誌位重寫**:每執行一小段**都需要去判斷標誌位,如果標誌位和初始化時不一樣了,那麼後面的**就不執行了,一直到錯誤處理的時候再執行。
(3)在編寫**時一定不要相同**重複寫多次,可以修改if檢測條件,想辦法讓他們執行在一起。
2、使用goto的注意事項
(1)如果沒有return的話,goto 也會順序執行下去
(2)goto應該盡可能的不去使用,使用其他方式代替;即便是必須去使用,在乙個子程式中最好只使用一次。
goto
· goto 是最後的選擇嗎?用 goto 使程式更好讀更好維護嗎?
· 用 goto 是為效率的目的嗎?用 goto 達到此目的了嗎?
· 乙個程式是否只用乙個 goto 呢?
· goto 只轉向前面的程式段而不是轉向其後面的程式段嗎?(後面指已執行過程式)
· goto 所轉向的標號都有了嗎?
return
· 每個子程式的 return 數目是否最少?
· return 增強了可讀性了嗎?
遞迴呼叫
· 用遞迴呼叫的**含使遞迴結束的語句嗎?
· 程式設定了安全計數器來保證遞迴呼叫終止了嗎?
· 是否只在乙個程式中用遞迴呼叫?
· 遞迴呼叫的深度是否限制在程式堆疊容量可滿足的條件下?
· 遞迴呼叫是實現程式的最優途徑嗎?它比迴圈更簡單嗎?
1、多個return可以增強子程式的可讀性和可維護性,同時可以避免產生很深的巢狀邏輯。但是使用它的時候要多加小心。
2、遞迴可以優雅的解決一小部分問題,對它的使用也要加倍小心。
3、在少數情況下,goto是編寫可讀性和可維護性**的最佳方法,但這種情況非常罕見。除非萬不得已,否則不要使用goto。
不常見的函式
不常見的函式 1.strstr 返回字串str中第一次出現子串substr的位址,如果沒有檢索到子串,返回null。2.sscanf 3.abort 4.strcmp 5.qsort 6.fflush 函式名 fflush 功 能 清除讀寫緩衝區,立即把輸出緩衝區的資料進行物理寫入 標頭檔案 std...
不常見的解密(解碼)
quoted printable可譯為 可列印字元引用編碼 編碼常用在電子郵件中,如 content transfer encoding quoted printable 它是mime編碼常見一種表示方法!在郵件裡面我們常需要用可列印的ascii字元 如字母 數字與 表示各種編碼格式下的字元!quo...
幾種有趣的不常見排序
幾種有趣的不常見排序演算法 我們常見的排序演算法有簡單選擇,冒泡,插入,兩路合併,希爾,堆,快速排序等等,下面介紹幾種不常見的排序演算法。雞尾酒排序 雞尾酒排序是氣泡排序的微調演算法。我們還記得,氣泡排序是每次遍歷整個序列,把較大的 我們這裡假設公升序排序 交換到後面。雞尾酒排序在交換到後面後,再逆...