產生:
比較:
(1)巨集呼叫並不執行型別檢查,甚至連正常引數也不檢查,但是函式呼叫卻要檢查。
(2)c語言的巨集使用的是文字替換,可能導致無法預料的後果,因為需要重新計算引數和操作順序。
(3)在巨集中的編譯錯誤很難發現,因為它們引用的是擴充套件的**,而不是程式設計師鍵入的。
(4)許多結構體使用巨集或者使用不同的語法來表達很難理解。內聯函式使用與普通函式相同的語言,可以隨意的內聯和不內聯。
(5)內聯**的除錯資訊通常比擴充套件的巨集**更有用。
內聯函式的缺點:
(1)通常,編譯器比程式設計者更清楚對於乙個特定的函式是否合適進行內聯擴充套件;一些情況下,對於程式設計師指定的某些內聯函式,編譯器可能更傾向於不使用內聯甚至根本無法完成內聯。
(2)對於一些開發中的函式,它們可能從原來的不適合內聯擴充套件變得適合或者倒過來。儘管內聯函式或者非內聯函式的轉換易於巨集的轉換,但增加的維護開支還是使得它的優點顯得更不突出了。
(3)對於基於c的編譯系統,內聯函式的使用可能大大增加編譯時間,因為每個呼叫該函式的地方都需要替換成函式體,**量的增加也同時帶來了潛在的編譯時間的增加。
巨集的缺點:
1. 由於是直接插入的,**量會增加。
2. 巢狀定義過多可能會影響程式的可讀性,而且很容易出錯。
3. 對帶參的巨集而言,由於是直接替換,不會檢查引數,存在安全隱患。
本文出自 「fun」 部落格,請務必保留此出處
巨集與內聯函式的區別
總結目的 本人曾經一度選擇放棄開發崗位,然後僅僅三個月之後又覺得自己的選擇是錯誤的,還是應該繼續自己比較擅長的開發,然而一次面試卻讓我發現,很小的知識點已經遺忘。1 巨集只做簡單的字串替換,函式是引數傳遞,所以必然有引數型別檢查 支援各種型別,而不是只有字串 2 巨集不經計算而直接替換引數,函式呼叫...
內聯函式與巨集定義區別
內聯函式和普通函式相比可以加快程式的執行效率,因為它不需要中斷呼叫,在編譯的時候內聯函式可以直接被鑲嵌到目標 中。而巨集只是在預處理階段乙個簡單的字元替換。內聯函式需要做型別檢查,這是相比巨集的乙個優勢。巨集是在 處不加任何驗證的簡單替代,而內聯函式是將 直接插入呼叫處,而減少了普通函式呼叫時的資源...
內聯函式與巨集替換的區別
1 內聯函式在執行時可除錯,而巨集不可以 2 內聯函式可以訪問類的成員變數,而巨集不可以 3 在類中宣告同時定義的簡單的函式,會自動轉換為內聯函式 4 編譯器會對內聯函式的引數型別做安全檢查 內聯函式具有巨集的替換效果,以及普通函式的安全檢查 define max a,b a b a b 一定要帶括...