行內函數和 普通函式 巨集定義的區別

2025-06-20 23:45:18 字數 1247 閱讀 3947

行內函數的定義

1樓:聲山雁

行內函數從源**層看,有函式的結構,而在編譯後,卻不具備函式的性質。行內函數不是在呼叫時發生控制轉移,而是在編譯時將函式體嵌入在每乙個呼叫處。編譯時,類似巨集替換,使用函式體替換呼叫處的函式名。

一般在**中用inline修飾,但是能否形成行內函數,需要看編譯器對該函式定義的具體處理。

行內函數與巨集的區別(c++)

2樓:俞德文袁碧

c++中的行內函數提供了巨集之上的功能。巨集是內聯**的簡單實現形式。。不過兩者有很大的區別。

行內函數採用的是值傳遞,而巨集定義採用的是對等替換。這一點非常重要,巨集定義沒用好,很可能在使用過程中陷入誤區。

例如下面這個巨集:

#define

max(a,b)

a>b?a:b

當我們這樣使用巨集時,沒有什麼問題:

max(num1,num2

因為巨集後變成。

num1>num2?num1:num2;。

但是,如果是這樣呼叫的,max(

呢,編譯時出現錯誤,原因是,巨集後變成:17+32>25+21?17+32:25+21,woh,這是什麼啊?

所以,巨集在使用時,引數一定要加上括號,上述的那個例子改成如下所示就能解決問題了。

#define

max((a),(b)

a)>(b)?(a)b)

即使是這樣,也不這個巨集也還是有bug,因為如果我這樣呼叫。

max(i++,j++)經過這個巨集以後,i和j都被累加了兩次,這絕不是我們想要的。所以,在巨集的使用上還是要謹慎考慮,因為巨集是的結果是很難讓人預料的。而且雖然,巨集的執行很快(因為沒有函式呼叫的開銷),但巨集會讓源**澎漲,使目標檔案尺寸變大,(如:

乙個50行的巨集,程式中有1000個地方用到,巨集後會很不得了),相反不能讓程式執行得更快(因為執行檔案變大,執行時系統換頁頻繁)。因此,在決定是用函式,還是用巨集時得要小心。

相同點:兩者都是在預處理階段,對**塊,進行替換。。

行內函數和巨集定義的區別

3樓:地瓜說機

1.行內函數在執行時可除錯,而巨集定義不可以;

2.編譯器會對行內函數的引數型別做安全檢查或自動型別轉換(同普通函式),而巨集定義則不會;

3.行內函數可以訪問類的成員變數,巨集定義則不能;

4.在類中宣告同時定義的成員函式,自動轉化為行內函數。

巨集和函式的區別,巨集和函式的區別是什麼?

巨集是簡單替換,用多少次就會替換多少次 函式是呼叫,不管用了多少次,還是隻有一份 1.巨集會在編譯器在對源 進行編譯的時候進行簡單替換,不會進行任何邏輯檢測,即簡單 複製而已。2.巨集進行定義時不會考慮引數的型別。3.引數巨集的使用會使具有同一作用的 塊在目標檔案中存在多個副本,即會增長目標檔案的大...

同一函式和同函式的區別?既然是同一函式定義域和關係相同,能值域不必然相同麼??求例

不可能。函式就是一一對應。即一個x對應一個y。就是函式f x到y 同一函式定義域相同,則值域一定相同。所以對函式來說,定義域很重要,一定要說明。定義域相同,值域也相同的兩個函式相等嗎 不一定相同。bai 例如f x 2x和dug x 3x 這兩個函式的定zhi義域都是r,值域也dao都是r,定義域和...

c中怎麼理解類內定義的成員函式就是行內函數

在類內定義的成員函式預設為inline,不論前面是否加了inline,當然,是否內聯還是取決於編譯器啦 而在類外定義的成員函式就不是行內函數。c 中怎麼理解類內定義的成員函式就是行內函數?當你的class。public成員函式宣告的時候,只要這個函式體當中不存在switch等迴圈語句的時候,則這個函...