C 第6課 內聯函式分析

2021-10-02 09:16:51 字數 1983 閱讀 1961

本文學習自 狄泰軟體學院 唐佐林老師的 c++課程

引入:c++內聯函式的引入是為了替換c中巨集**塊功能

實驗1 :巨集**塊 vs 內聯函式

注意:在c++開發中首選內聯函式定義**塊,而不是巨集
實驗2:強制內聯

c語言中的巨集常量只是在預處理期間進行鍵的文字替換,它的***是並不會進行任何的語法檢查,型別檢查。所以在c++中 對const關鍵字進行了公升級,const所定義的常量就成為了真正意義上的常量,而不是唯讀變數,所以在c++中 如果我們想使用巨集常數,我們可以直接用const定的常量來替換巨集常量。另外c中我們也可以定巨集**塊,看上去是函式,但是並不是函式,因此巨集**塊的使用,經常是帶有***的。在c++中提供了解決方案來替換c中的巨集**塊-----內聯函式

當c++編譯器沒有滿足函式的內聯請求時,該內聯函式就成為了普通的函式,同樣存在壓棧,跳轉,返回等開銷。

實驗1 :巨集**塊 vs 內聯函式

attribute() 相對於g++編譯器而言,是關鍵字,而不是標準c++語法中的所支援的。而是特殊的g++編譯器所支援的東西。

實驗2:強制內聯

第6課 內聯函式分析

帶參函式巨集內聯函式 優點編譯器會做引數的靜態型別檢查 原地展開,沒有呼叫開銷 並且在預處理階段完成,不占用編譯時間。函式 被裝入符號表中,在使用時進行替換 沒有呼叫開銷,效率高,會進行引數型別檢查 缺點需要傳參 棧變數的開闢和銷毀 壓棧 跳轉 返回開銷 不進行型別檢查,多次巨集替換會導致 體積變大...

inline函式 第6課 內聯函式分析

一 常量與巨集回顧 c 中的const常量可以替代巨集常數定義,如 const int a 3 等價於 define a 3 那麼c 中是否有解決方案替代巨集 片段呢?請看以下內容。二 內聯函式的定義 1 c 中推薦使用內聯函式替代巨集 片段 2 c 中使用inline關鍵字宣告內聯函式 3 內聯函...

C 學習記錄6 內聯函式分析

c 中const常量可以代替巨集常數定義 使用內聯函式替代巨集 片段。c 中標推薦使用內聯函式代替巨集 片段。c 中使用inline關鍵字宣告內聯函式。內聯函式宣告時inline關鍵字必須和函式定義結合在一起,否則編譯器會直接忽略內聯請求。函式呼叫時,會有引數入棧 函式返回 棧變數的銷毀等等的開銷,...