函式設計中存在的一些問題

2021-06-05 11:05:01 字數 1432 閱讀 3020

對函式傳入,是指用實參將外部資料傳給函式,以便於在函式體內對其處理。

對函式傳出,是指用返回值將函式處理的結果交給主調函式。

設計函式時要考慮到:

1、函式是否擔負修改實參的任務?

2、傳入實參是否會影響效率?

3、形參是否還要承擔向呼叫者傳遞部分結果的任務?

關注函式的返回值:

1、這個位址是區域性變數的嗎?

2、這個位址是由函式malloc()或new產生的?

3、這個位址是形參傳進來的嗎?

4、是全域性變數的位址嗎?

5、是靜態變數的位址嗎?

若是4或5,則無事;若是1,則錯了!若是2,則要追蹤其何時釋放;若是3,則要看形參自身是指標,則可以,若形參不是指標,則錯。

函式返回的可以是:

1、變數的值(無論區域性還是全域性);

2、靜態區域性變數的值或址;

3、靜態區域性陣列的址;

4、全域性變數的值或址;

5、全域性陣列的址;

6、堆空間的位址;

注意:函式返回型別是指標時的模糊性

函式的返回型別可以是指標。比如,用於在陣列中查詢某值的函式,通常做成「當查到時,返回指向該元素的指標;查不到時,返回null指標。」

這種「用乙個值表示兩種不同含義」的做法很危險。因為它加重了使用函式者的負擔。若查詢的元素的值就是null怎麼辦?

一些結論:

1、函式呼叫只能用於非靜態區域性變數的初始化。

2、靜態變數作形參,失去了靜態性

子函式的構造原則:

乙個函式應具有的強壯性體現在兩個方面:

1、對傳來的實參不能無條件地接受,要進行合法性驗證,不要基於「實參都是對的」的懶惰慣性思維,要學會拒絕;

2、函式體內的處理過程也要時時進行合理性檢查,要由容錯處理(異常處理)機制,一旦有錯不但會報警,還要有全身而退的對策。因為程式是在有限資源的空間上執行的。

通常由三種處理方法:

1)最極端的做法就是用exit(-1)函式,粗暴的終止程式,這無異於**;

2)用拋擲異常的現代手段;

3)讓子函式溫和地停止,並返回乙個真假值,此法能使程式不致夭折,將決定權交由呼叫者酌情處理。此謂全身而退策略。

函式指標的意義:

1、歷史的原因,函式型別不能做引數,語言將自動將轉換為函式指標。

2、通過函式指標可以使c++語言使用其他語言寫就的函式。

3、通過函式指標引數尅使主調函式得到不同的被傳入的函式,於是可以表現出多種行為。

4、函式指標使虛函式得以實現。

5、通過函式指標可以括約本地程序,訪問其他程序。

6、函式指標使函式設計更加變幻莫測,會偏離函式的黑盒性。

7、函式可以定義引用。

函式指標有它的乙個致命的缺點:

無法對引數和返回值的型別進行檢查,因為函式已經退化成指標,指標是不帶有這些型別資訊的。少了型別檢查,當引數或者返回值不一致時,會造成嚴重的錯誤。

window存在的一些問題!

1 some tips for table service.1.1 修改最大連線數,如果需要。config file servicepointmanager.defaultconnectionlimit 24 1.2 turn off 100 continue config file service...

DCS系統存在的一些問題

dcs系統是繼plc之外的一大自動化控制系統,它在化工 火電等領域的應用極為廣泛,但是生產方面的自動化技術需求進一步提高,傳統的dcs系統已不能滿足需要,需要進行技術公升級。dcs系統由多台計算機分別控制生產過程中多個控制迴路,同時又可集中獲取資料 集中管理和集中控制的自動控制系統。分布式控制系統採...

Rust中的可變引用(存在一些問題)

示例程式 fn main s 輸出 yuyoubei fn make yuyoubei s mut string 使用使用 mut來修飾函式呼叫時的可變引用 函式宣告時也需要 mut來修飾函式型別。例如下面的程式是錯誤的 fn main r2 r1,r2 會提示出錯 error e0499 cann...