內聯函式與c巨集相比的優點有哪些

時間 2022-03-19 16:45:20

1樓:徐哥聊運營

c++ 語言支援函式內聯,其目的是為了提高函式的執行效率(速度)。

在c程式中,可以用巨集**提高執行效率。巨集**本身不是函式,但使用起來象函式。

預處理器用複製巨集**的方式代替函式呼叫,省去了引數壓棧、生成組合語言的call呼叫、

返回引數、執行return等過程,從而提高了速度。

2樓:匿名使用者

可以除錯,看值!!!!巨集是無法除錯的!

3樓:海金剛俊傑

函式內聯

用內聯取代巨集**

----------------

c++語言支援函式內聯,其目的是為了提高函式的執行效率(速度)。

在c程式中,可以用巨集**提高執行效率。巨集**本身不是函式,但使用起來象函式。

預處理器用複製巨集**的方式代替函式呼叫,省去了引數壓棧、生成組合語言的call呼叫、

返回引數、執行return等過程,從而提高了速度。

使用巨集**最大的缺點是容易出錯,預處理器在複製巨集**時常常產生意想不到的邊際效應。

對於c++

而言,使用巨集**還有另一種缺點:無法操作類的私有資料成員。

讓我們看看c++

的"函式內聯"是如何工作的。

對於任何內聯函式,編譯器在符號表裡放入函式的宣告(包括名字、引數型別、返回值型別)。

如果編譯器沒有發現內聯函式存在錯誤,那麼該函式的**也被放入符號表裡。

在呼叫乙個內聯函式時,編譯器首先檢查呼叫是否正確

(進行型別安全檢查,或者進行自動型別轉換,當然對所有的函式都一樣)。

如果正確,內聯函式的**就會直接替換函式呼叫,於是省去了函式呼叫的開銷。

這個過程與預處理有顯著的不同,因為預處理器不能進行型別安全檢查,或者進行自動型別轉換。

假如內聯函式是成員函式,物件的位址(this)會被放在合適的地方,這也是預處理器辦不到的。

c++語言的函式內聯機制既具備巨集**的效率,又增加了安全性,而且可以自由操作類的資料成員。

所以在c++

程式中,應該用內聯函式取代所有巨集**,"斷言assert"恐怕是唯一的例外。

assert是僅在debug版本起作用的巨集,它用於檢查"不應該"發生的情況。

為了不在程式的debug版本和release版本引起差別,assert不應該產生任何***。

如果assert是函式,由於函式呼叫會引起記憶體、**的變動,那麼將導致debug版本與release版本存在差異。

所以assert不是函式,而是巨集。

在c中,內聯函式和外聯函式的區別是什麼

在類的定義中規定在類體中說明的函式作為類的成員,稱為成員函式。前面講過一般的成員函式,它是根據某種類的功能的需要來定義的。又講述了一些特殊的成員函式 建構函式 析構函式 拷貝初始化建構函式等。還有一些成員函式後面還會介紹。成員函式除了說明和定義在類中之外,還有些什麼特性,這是本節討論的問題。一 內聯...

內聯函式和成員函式的區別是什麼,類體外定義成員函式和 內聯成員函式有什麼區別

黃邦勇帥哥哥 1 內聯函式可減少cpu的系統開銷,並且程式的整體速度將加快,但當內聯函式很大時,會有相反的作用,因此一般比較小的函式才使用內聯函式 2 有兩種內聯函式的宣告方法,一種是在函式前使用inline關見字,另一種是在類的內部定義函式的 這樣的函式將自動轉換為內聯函式,而且沒必要將inlin...

關於C語言函式與陣列的問題

include stdio.h void swap int a,int b,int n c語言函式間引數的傳遞全部是值傳遞,分傳值和傳址兩種 你問的問題跟傳址有關,所謂傳址就是將一塊記憶體的首位址值在函式間進行傳遞,實際上也是傳值,只不過這個值不是你所賦予的值,而是位址值 比如我們定義一維陣列,進行...

c虛函式呼叫,C 虛函式呼叫

虛函式的好處是,你只要有乙個基類的指標,就可以根據情況來執行派生類中的函式。比如你給的程式中,main中只有乙個指標,他是指向基類a的 p 但是你注意這裡,p b p print 這裡將輸出 20 及b.setb 20 的結果。而如果print不是虛函式,這裡將輸出 10,你可以自己試試 也就是說,...

c 函式名 縮寫,C 函式名 縮寫

stdio librany 標準函式庫的意思。第二個不清楚 exp是冪的意思 standard library ldexp 是乙個 math.h 裡面的乙個函式,double ldexp double x,int exp 功能 用來將引數x乘上2的exp次方值,即x 2exp。std就是標準的英文縮...