c和c 的區別(一)

2021-08-31 07:40:05 字數 1310 閱讀 6093

在函式宣告或定義的地方,給函式引數加上預設的引數,在函式呼叫處,可以不必給該引數傳值,會預設傳入預設值。

必須從右向左,依次賦值。

在同一作用域中,函式引數的預設值,不可以重複賦值

巨集函式:

優點:1、不存在棧幀的開闢

2、不存在引數的帶入

3、不存在引數的帶出

4、不存在引數的清除

缺點:1、不存在安全檢查(型別檢查)

2、不可以除錯

內聯函式:在普通函式前加上inline即可構成內聯函式,內聯函式會在呼叫點展開

問題1:內聯函式在什麼時候展開?

在編譯期展開。

不在預編譯期展開的原因:因為預編譯期不進行型別檢查,如果在預編譯期展開就無法進行型別檢查,就和巨集函式一樣了;

注意:

符號無法使用有兩種情況1、符號不存在2、符號不允許使用。符號分為local型別和global型別,local型別符號只允許在指定作用域使用,比如靜態函式在編譯期間生成的就是乙個local符號,只允許在本檔案引用。

內聯函式在realse版本不產生符號,不可以除錯。

在debug版本產生乙個local型別的符號,可以除錯,會進行棧幀開闢等動作。

inline

static

巨集函式debug版本產生local符號

realse版本不產生服啊後

產生local符號

不產生符號

debug版本進行棧幀開闢等操作

realse版本直接在呼叫點展開(編譯期)

進行棧幀開闢操作

在呼叫點直接展開(預編譯期)

dubug版本可以除錯

可以除錯

不可以除錯

有型別檢查

有型別檢查

沒有型別檢查

問題2:內聯函式一定會展開嗎?

inline是對編譯器的乙個建議,編譯器會在具體情況考慮是否處理成內聯,比如在遞迴的時候使用內聯函式,在編譯期間無法知道遞迴的次數,就無法確定展開多少次,無法展開。

函式過載有以下要素:

函式名相同

引數列表不同

處於同一作用域

注意:傳參時的型別轉換,容易出現多個過載函式都匹配的情況。

C 和C的區別

c 與c語言的關係 1 c 繼承了所有的c特性 2 c 在c的基礎上提供了更多更好的語法和特性 3 c 的設計目標是執行效率和開發效率的統一 c 對c語言的加強 1 c 中所有的變數都可以再需要使用時再定義 如 for迴圈等中需要的變數 3 c中可以定義多個同名的全域性變數 c 不可以 4 cons...

C和C 的區別

這裡主要討論的是區別,而不是c 中有的,而c語言中沒有的東西。c 比c語言多了很多東西,最重要的當屬類 物件導向程式設計 和模板 泛型程式設計 基於泛型程式設計還引出了元程式設計 metaprogramming 等等。這裡討 共部分但是不一樣的部分 函式過載是c 支援的,c不支援 c 的函式過載在類...

C 和C的區別

c c 的聯絡 c c 區別 小知識點補充擴充套件 free 而new開闢物件陣列用的是new size 釋放的的時候是 delete 5 返回值問題,malloc開闢成功返回void 需要強轉,失敗返回null,new 成功返回物件指標,失敗丟擲異常 這就可能會提到c 的new handler機 ...