行內函數和巨集
巨集定義和行內函數的區別 1. 巨集定義不是函式,但是使用起來像函式。前處理器用複製巨集程式碼的方式代替函式的呼叫,省去了函式壓棧退棧過程,提高了效率。
行內函數本質上是一個函式,行內函數一般用於函式體的程式碼比較簡單的函式,不能包含複雜的控制語句,while、switch,並且行內函數本身不能直接呼叫自身。如果行內函數的函式體過大,編譯器會自動的把這個行內函數變成普通函式。
2. 巨集定義是在預編譯的時候把所有的巨集名用巨集體來替換,簡單的說就是字串替換
行內函數則是在編譯的時候進行程式碼插入,編譯器會在每處呼叫行內函數的地方直接把行內函數的內容展開,這樣可以省去函式的呼叫的開銷,提高效率
3. 巨集定義是沒有型別檢查的,無論對還是錯都是直接替換
行內函數在編譯的時候會進行型別的檢查,行內函數滿足函式的性質,比如有返回值、引數列表等
4. 巨集定義和行內函數使用的時候都是進行程式碼展開。
不同的是巨集定義是在預編譯的時候把所有的巨集名替換,行內函數則是在編譯階段把所有呼叫行內函數的地方把行內函數插入。這樣可以省去函式壓棧退棧,提高了效率
相關推薦
行內函數和巨集
巨集定義和行內函數的區別 1. 巨集定義不是函式,但是使用起來像函式。前處理器用複製巨集程式碼的方式代替函式的呼叫,省去了函式壓棧退棧過程,提高了效率。 行內函數本質上是一個函式,行內函數一般用於函式體的程式碼比較簡單的函式,不能包含複雜的控制語句,while、sw
【C++】行內函數和巨集的區別
行內函數 行內函數指的是用[ inline ]關鍵字修飾的函式,在類體內定義的函式會被預設定義為行內函數 特性 行內函數會在【編譯】期間進行替換,就是將呼叫該函式的地方換成【函式體】(類似於C語言中的巨集,然而巨集是在【預處理】階段進行替換) 行內函數和巨集的不同之處 1、
面試---行內函數和巨集定義的區別
用行內函數取代巨集: 1.行內函數在執行時可除錯,而巨集定義不可以; 2.編譯器會對行內函數的引數型別做安全檢查或自動型別轉換(同普通函式),而巨集定 義則不會; 3.行內函數可以訪問類的成員變數,巨集定義則不能; 4.在類中宣告同時定義的成員函式,自
行內函數和巨集定義的區別和聯絡
深入到計算機的本質,其實,很多東西還是細節需要深入分析的,比如我最近的一份工作 行內函數和巨集很類似,都是以空間換時間,都能一定程度上加快程式的執行。而區別在於,巨集是由前處理器對巨集進行替代,而行內函數是通過編譯器控制來實現的。而且行內函數是真正的函式,只是在需要用到的時候,行內函數像巨集一樣的展
行內函數和巨集定義的區別
使用巨集和行內函數都可以節省在函式呼叫方面所帶來的時間和空間開銷。二者都採用了空間換時間的方式,在其呼叫處進行展開: (1) 在預編譯時期,巨集定義在呼叫處執行字串的原樣替換。在編譯時期,行內函數在
c++中得行內函數和巨集定義
在c++中行內函數是對巨集定義一種改造,因為利用行內函數取代巨集定義得好處是: 1、可進行型別安全檢查或自動型別轉換、 例如:在c語言中,常用前處理器語句#define來代替一個函式定義。例如: #define MAX(a,b) ((a)>(b
行內函數 和 巨集定義 區別
用內聯取代巨集: 1.行內函數在執行時可除錯,而巨集定義不可以; 2.編譯器會對行內函數的引數型別做安全檢查或自動型別轉換(同普通函式),而巨集定義則不會; 3.行內函數可以訪問類的成員變數,巨集定義則不能; 4.在類中宣告同時定義的成員函式,自動轉化為行內函數。
C/C++之巨集、行內函數和普通函式的區別
轉載:https://www.cnblogs.com/ht-927/p/4726570.html C/C++之巨集、行內函數和普通函式的區別 行內函數的執行過程與帶引數巨集定義很相似,但引數的處理不同。帶引數的巨集定義並不對引數進行運算,而是直接替換;行內函數首先是函式,這就意味著函式的很多
行內函數和預處理巨集區別
行內函數的功能和預處理巨集的功能相似。相信大家都用過預處理巨集,我們會經常定義一些巨集,如 #define TABLE_COMP(x) ((x)>0?(x):0) 就定義了一個巨集。 為什麼要使用巨集呢?因為函式的呼叫必須要將程式執行的順序轉移到函式 所存放
行內函數,巨集定義,記憶體對齊,型別轉換
巨集 與 inline的區別 存在的價值,兩者都是文字替換,降低程式跳轉次數,提高效率 1. define 是預處理命令,無法除錯 ,最簡單文字替換, inline 是編譯期替換,可以除錯, 存在引數型別檢查 2. 使用inline的時候,函式必須定義 直接定義的函式
c++中函式的引數傳遞,行內函數和預設實參的理解
1.引數傳遞 1)函式呼叫時,c++中有三種傳遞方法:值傳遞、指標傳遞、引用傳遞。 給函式傳遞引數,遵循變數初始化規則。非引用型別的形參一相應的實參的副本初始化。對(非引用)形參的任何修改僅作用域區域性副本,並不影響實參本身。 為了避免傳遞副本的開銷,可將形參指定為引用型別。對引用形參的
c++ 行內函數和constexper函式
行內函數 將函式宣告行內函數, 通常是在編譯器, 將它在呼叫點將函式“內聯展開”。 inline int len(const string& str) { return st
行內函數和函式過載
行內函數 巨集可以避免函式呼叫帶來的開銷,但存在兩個問題:1)巨集沒有作用域,沒有型別檢測,另外定義巨集時,需要時刻注意加括號,除此之外,當傳入變數自增時,會出現不可避免的錯誤。2)C++中巨集不能作為類的成員函式,因為前處理器不能訪問類成員。 行內函數主要為了替代巨集,另外,類中的成員函式預設加
行內函數與巨集的差別
C++程式語言 巨集是內聯程式碼的原始實現。 #define SQUARE(X) X*X 這並不是以傳遞引數實現的,而是通過文字替代實現的--X是“引數”的符號標記。 在標準C中,傳遞引數主要有2種方式:1.按值傳遞;2.按指標傳遞 在C++中,新增了一種與指標傳遞非常類
行內函數與巨集的簡單說明
1. c 語言中的巨集 c語言使用預處理語句#define來實現巨集定義,例如一個計算平方的巨集: #define square_mine(x) x*x 需要說明的是,巨集並不是通過傳遞引數實現的,而是通過文字替換來實現。 看下面的例子: #in
隱式行內函數和顯式行內函數
讓一個函式成為行內函數,隱式的為在類裡定義函式,顯式的則是在函式前加上inline關鍵字說明。 // // inline1.cpp // C++primary // // Created by amesty on 16/5/11. // Copy
C++的行內函數和過載函式
行內函數行內函數是C++語言為降低小程式用開銷而採取的一種機制。定義行內函數的方法是,在函式名第一次出現時,在函式名之前冠以關鍵字inline。通常在函式原型中指定。若已在函式原型中指定inline,則函式定義時不能重複給出。行內函數原型為:inline 型別 函式名(形式引
C++ 普通行內函數 及行內函數與巨集的區別
巨集的使用: 因為函式的呼叫必須要將程式執行的順序轉移到函式所存放在記憶體中的某個地址,將函式的程式內容執行完後,再返回到轉去執行該函式前的地方。這種轉移操作要求在轉去執行前要儲存現場並記憶執行的地址,轉回後要恢復現場,並按原來儲存地址繼續執行。因此,函式呼叫要有一定
行內函數與巨集的區別
行內函數是程式碼被插入到呼叫者程式碼處的函式。如同 #define 巨集,行內函數通過避免被呼叫的開銷來提高執行效率,尤其是它能夠通過呼叫(“過程化整合”)被編譯器優化。 內 聯函式和巨集很類似,而區別在於,巨集是由前處理器對巨集進行替代,而行內函數是通過編譯器控
行內函數與巨集函式的區別
行內函數 概念 以inline修飾的函式叫做行內函數,編譯時C++編譯器會在呼叫行內函數的地方展開,沒有函式壓棧的開銷,行內函數提升程式執行的效率 特性 inline