1.形參帶預設值的函式
1.給預設值,需要從右向左給,壓棧的時候從右向左壓。
int
sum(
int a =10,
int b)
//這樣是錯誤的
2.給預設值呼叫效率高
因為呼叫時給值,h彙編會直接壓棧,如果是給變數值,還需要多一條move指令,需要從記憶體中取值到暫存器,再壓棧。
3.定義可以給形參預設值,宣告也可以
4.不管是宣告給預設值,還是定義出給,形參預設值只能給一次
//這樣是可以的
intsum
(int a,
int b=10)
;int
sum(
int a =10,
int b)
;//這樣是錯誤的
intsum
(int a =10,
int b)
;int
sum(
int a,
int b=10)
;//這樣也是錯誤的,b給了2次值
intsum
(int a =10,
int b =10)
;int
sum(
int a,
int b=10)
;
2.內聯函式
1.內聯函式會直接在編譯期,呼叫點展開,減少呼叫開銷
2.但是不是所有的內聯函式都會被編譯器處理為內聯函式,最終會有編譯器決定是否處理為內聯函式。
3.內聯函式不生成相應的函式符號
4.inline只有在release版本起作用,debug是不起作用的
與巨集的區別:
1.巨集在預編譯時期展開,內聯函式在編譯時期展開
2.內聯由於經歷編譯期,所以有型別,引數檢查,巨集是沒有的
3.巨集只是簡單的文字替換,內聯函式可以鑲嵌在**裡,會增加記憶體開銷
4.內聯是函式,巨集不是
C 內聯函式和帶預設形參值的函式
1.內聯函式 使用函式有利於 重用,可以提高開發效率,增強程式的可讀性,也便於分工合作,便於修改維護。但是,函式呼叫也會降低程式的執行效率,增加時間和空間方面的開銷。因此對於一些功能簡單 規模較小又使用頻繁的函式,可以設計為內聯函式。內聯函式不是在呼叫時發生控制轉移,而是在編譯時將函式體嵌入在每乙個...
函式指標形參
一 在介紹指標形參之前,先簡要說明下兩個運算子 和 1 取址運算子 用來取得其運算元的位址。取址運算子的運算元必須是在記憶體中可定址到。換句話說,該運算子只能用作函式或物件 例如左值 而不可以用於位欄位,以及那些未被儲存型別修飾符register宣告的內容。float x,ptr ptr x 合法 ...
帶參巨集 函式 及內聯函式
帶參巨集即為帶有引數的巨集定義,要注意的是,在書寫帶參巨集時一定要給每乙個引數帶括號,並給表示式整體帶括號。如求a,b中較大者 define max a,b a b a b 眾所周知,巨集定義是在預處理階段由預處理器對所定義的巨集進行原地展開的,而預處理器是不帶引數檢驗功能的,所以帶參巨集無法對其引...